1 文字ずつ切り出す
String クラスの chars メソッド(別名 each_char)を使用すると、文字列内の文字を 1 文字ずつ取り出しながら処理することができます。
s = 'ABC'
p s.chars
s.chars { |ch| puts ch }
$ ruby sample.rb
["A", "B", "C"]
A
B
C
1 文字ずつコードポイントを得る
文字列内の文字 1 文字ごとのコードポイントを取得するには、codepoints(別名 each_codepoint)を使用します。
# encoding: utf-8
s = 'ABCあいう'
s.codepoints { |x| printf('U+%04X ', x) }
$ ruby sample.rb
U+0041 U+0042 U+0043 U+3042 U+3044 U+3046
もとの文字とコードポイントの対応付けがわかるようにするには、下記のように ord メソッドを組み合わせて使用するのがよいでしょう。
ord は、その文字列の先頭の文字のコードポイントを返します。
# encoding: utf-8
s = 'ABCあいう'
s.chars { |ch| printf("U+%04X %s\n", ch.ord, ch) }
U+0041 A
U+0042 B
U+0043 C
U+3042 あ
U+3044 い
U+3046 う
コラム: Ruby では 1 文字ずつに分割しても文字列型
Java や C++ には、1 文字を表す char 型がありますが、Ruby の場合はすべて文字列です。
そのため、下記のように分割したあとの型 (class) を調べると、String と表示されます。
'ABC'.each_char do |ch|
puts "#{ch} -- #{ch.class}"
end
A -- String
B -- String
C -- String