[Ruby] 全角文字を2文字として文字数をカウントする
非アスキー文字を2文字とカウントする。
知らなかったメソッドもあって勉強になりました。
[3] pry(main)> def width
[3] pry(main)* self.length + self.chars.reject(&:ascii_only?).length
[3] pry(main)* end
=> :width
[4] pry(main)> 'hogeふが'.width
=> 8
String#chars
文字列の各文字を文字列の配列で返します。(self.each_char.to_a と同じです)
[8] pry(main)> 'hogeふが'.chars
=> ["h", "o", "g", "e", "ふ", "が"]
String#ascii_only?
文字列がASCII文字のみで構成されている場合に true を返します。さもなくば false を返します。
[9] pry(main)> 'hogeふが'.ascii_only?
=> false
[10] pry(main)> 'hoge'.ascii_only?
=> true
[11] pry(main)> 'ふが'.ascii_only?
=> false
Enumerable#inject
リストのたたみこみ演算を行います。
[5] pry(main)> [1, 2, 3, 4, 5].inject(:+)
=> 15
[21] pry(main)> ["h", "o", "g", "e", "ふ", "が"].reject {|item| item.ascii_only? }
=> ["ふ", "が"]