length -> Integer[permalink][rdoc][edit]size -> Integer-
文字列の文字数を返します。バイト数を知りたいときは bytesize メソッドを使ってください。
例p "test".length # => 4 p "test".size # => 4 p "テスト".length # => 3 p "テスト".size # => 3 p "\x80\u3042".length # => 2 p "\x80\u3042".size # => 2ここでの「文字数」は Unicode のコードポイントの数を指しており、見た目上の1文字 (書記素クラスタ) の数とは限りません。たとえば、結合文字 (合成用ダイアクリティカルマーク) を使って NFD (Unicode 正規化形式 D) で表現された文字列は、見た目が同じ NFC (正規化形式 C) の文字列よりも length が大きくなることがあります。また、複数のコードポイントが ZWJ (Zero Width Joiner) で連結されて1つの絵文字として表示される文字列でも、length は連結されたコードポイントの数を返します。
例: コードポイント単位で数えられる例p "\u{1F600}".length # => 1 (絵文字。1コードポイントなら1文字扱い) p "\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F466}".length # => 5 (ZWJ で連結した家族の絵文字。見た目は1つだが5コードポイント) p "e\u0301" # => "é" (NFD: e + 合成用アキュートアクセント。2コードポイント) p "e\u0301".length # => 2 p "\u00E9" # => "é" (NFC: 合成済みの1コードポイント) p "\u00E9".length # => 1見た目上の1文字 (書記素クラスタ) 単位で数えたい場合は String#grapheme_clusters や String#each_grapheme_cluster を使ってください。
例p "e\u0301".grapheme_clusters # => ["é"] p "e\u0301".grapheme_clusters.length # => 1[SEE_ALSO] String#bytesize, String#grapheme_clusters