遍历一个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"]]