繁体   English   中英

迭代 ruby​​ 1.8.6 (each_char) 中字符串的每个字符

[英]iterating over each character of a String in ruby 1.8.6 (each_char)

我是 ruby​​ 的新手,目前正在尝试将每个字符与 ruby​​ 中的基本字符串分开操作。 我正在使用 ruby​​ 1.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

也许有一种方法可以使用未修改的字符串开始实现此输出?

我认为 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

编辑:另一种选择是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

扩展 la_f0ka 的评论,尤其是。 如果您还需要代码中的索引位置,您应该能够做到

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

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

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

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

Ruby 版本 >2.5.1

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"]]

返回 str 中的字符数组。 这是 str.each_char.to_a 的简写。 如果给出了一个块,这是一种不推荐使用的形式,其工作方式与 each_char 相同。

来自ruby-doc.org

现在你也可以做 string.chars

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM