在ruby 1.8.6中迭代字符串的每个字符怎么实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

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

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

这会产生`each_char'错误。

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

A
B
C
D
..etc

each_char方法仅为1.9定义吗?我尝试使用简单的each方法,但块简单地输出一行中的整个字符串。这是代码:

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

输出:

A
B
C
..etc

是否有一种方法可以使用未修改的字符串来实现此输出?

我认为:

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

编辑:另一种选择是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
用户回答回答于

你应该可以:

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

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

扫码关注云+社区