遍历一个string的每个字符在ruby1.8.6(each_char)

我是新来的ruby,目前试图在每个字符与ruby的基本string分开操作。 我正在使用ruby1.8.6,并希望做一些事情:

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

这会产生一个未定义的方法`each_char'错误。

我期待看到一个垂直输出:

 A B C D ..etc 

是否仅为1.9定义了each_char方法? 我尝试使用简单的each方法,但块简单地输出一行中的整个string。 唯一的办法就是如何做到这一点,这是相当不方便的是从开始创build一个字符数组:

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

这输出所需的:

 A B C ..etc 

有没有办法使用未修改的string来实现这个输出呢?

我认为Java的等价物是:

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

我也有同样的问题。 我通常诉诸String#split

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

我想你也可以像这样自己实现它:

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

编辑:另一种select是String#each_byte ,在Ruby 1.8.6中可用,它返回ASCIIstring中每个字符的ASCII值:

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

扩展la_f0ka的评论,特别是 如果你还需要你的代码中的索引位置,你应该可以做到

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

.chr非常重要,因为Ruby <1.9 返回该位置的字符代码,而不是该位置 的一个字符的子string 。

1.8.6真的有问题。 在这个版本之后就可以了

在1.8.6中,你可以添加这个:

 requre 'jcode' 

但现在你可以做更多:

 a = "cruel world" a.scan(/\w+/) #=> ["cruel", "world"] a.scan(/.../) #=> ["cru", "el ", "wor"] a.scan(/(...)/) #=> [["cru"], ["el "], ["wor"]] a.scan(/(..)(..)/) #=> [["cr", "ue"], ["l ", "wo"]]