ruby 1.8.6(each_char)の文字列の各文字を反復処理する


86

私はrubyを初めて使用し、現在、rubyのベース文字列とは別に各文字を操作しようとしています。私はruby1.8.6を使用していて、次のようなことをしたいと思っています。

"ABCDEFG".each_char do |i|
  puts i
end

これにより、未定義のメソッド「each_char」エラーが発生します。

私は次の垂直出力を見ることを期待していました:

A
B
C
D
..etc

あるeach_charだけ1.9用に定義された方法は?プレーンeachメソッドを使用してみましたが、ブロックは文字列全体を1行に出力するだけです。これを行う方法を理解する唯一の方法は、かなり不便ですが、最初から文字の配列を作成することです。

['A','B','C','D','...'].each do|i|
  puts i
end

これにより、目的の出力が得られます。

A
B
C
..etc

そもそも変更されていない文字列を使用してこの出力を達成する方法はおそらくありますか?

Javaに相当するものは次のとおりです。

for (int i = 0; i < aString.length(); i++){
  char currentChar = aString.charAt(i);
  System.out.println(currentChar);
}

1
"asfds" .char.each ....
Muhammad

回答:


115

私も同じ問題を抱えてる。私は通常に頼りString#splitます:

"ABCDEFG".split("").each do |i|
  puts i
end

次のように自分で実装することもできると思います。

class String
  def each_char
    self.split("").each { |i| yield i }
  end
end

編集:さらに別の代替手段がString#each_byteあり、Ruby 1.8.6で利用可能であり、ASCII文字列で各文字のASCII値を返します。

"ABCDEFG".each_byte do |i|
  puts i.chr # Fixnum#chr converts any number to the ASCII char it represents
end

役立つヒントをありがとう。それはうまくいきます。では、each_charメソッドは何に使用されますか?私が思うに、新しいバージョンのためだけに?
denchr 2009

今まで調べたことがありませんが、少しグーグルした後、1.8.6のドキュメントに誤って記載されているようですが、1.8.7まで利用できません。
ジェレミールーテン

each_charメソッドは古いバージョン用であり、他の方法ではありません。ruby-doc.org/core/classes/String.html#M000862にはまだ文書化されていませんが、驚いたことに、each_charはjeremyのsplitのような文字列を生成します。
マーティンドーレー2010年

15

la_f0kaのコメントを拡張する、特に。コード内のインデックス位置も必要な場合は、次のことができるはずです。

s = 'ABCDEFG'
for pos in 0...s.length
    puts s[pos].chr
end

.chrRuby <1.9は、その位置にある1文字の部分文字列ではなく、その位置ある文字のコードを返すため、これは重要です。


5
0..s.length - 1=0...s.length
MatthewRock 2015

ありがとう@MatthewRock、変更されました。
sschuberth 2017年

1

1.8.6には本当に問題があります。この版の後は大丈夫です

1.8.6では、これを追加できます。

requre 'jcode'

1

しかし今、あなたはもっと多くのことができます:

a = "cruel world"

a.scan(/\w+/)        #=> ["cruel", "world"]

a.scan(/.../)        #=> ["cru", "el ", "wor"]

a.scan(/(...)/)      #=> [["cru"], ["el "], ["wor"]]

a.scan(/(..)(..)/)   #=> [["cr", "ue"], ["l ", "wo"]]

1
"ABCDEFG".chars.each do |char|
  puts char
end

また

"ABCDEFG".each_char {|char| p char}

Rubyバージョン> 2.5.1

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.