在Ruby语言中,如何获取字符串中的行数?

时间:2010-04-07 04:43:19

标签: ruby string count

在Ruby语言中,如何获取字符串中的行数?

6 个答案:

答案 0 :(得分:54)

对于返回lines的字符串,有一个Enumerator方法。在枚举器上调用count

str = "Hello\nWorld"
str.lines.count # 2

str = "Hello\nWorld\n" # trailing newline is ignored
str.lines.count # 2

在Ruby 1.8.7中引入了lines方法。如果您使用的是旧版本,请查看@mipadi和@Greg的答案。

答案 1 :(得分:6)

一种方法是计算行结尾的数量(\n\r\n,具体取决于字符串),需要注意的是,如果字符串结束在新的一行中,您必须确保在计数中添加一个。你可以这样做:

c = my_string.count("\n")
c += 1 unless c[-1,1] == "\n"

你也可以循环遍历字符串并计算行数:

c = 0
my_string.each { |line| c += 1 }

继续使用该解决方案,您可以非常喜欢并使用inject

c = my_string.each.inject(0) { |count, line| count += 1 }

答案 2 :(得分:4)

string".split("\n").size效果很好。我喜欢它忽略了尾随的新行,如果它们不包含内容。

"Hello\nWorld\n".split("\n") # => ["Hello", "World"]
"hello\nworld\nfoo bar\n\n".split("\n").size # => 3

这可能不是你想要的,所以如果你需要尊重所有新行,请使用lines()作为@Anurag建议。

"hello\nworld\nfoo bar\n\n".lines.count # => 4

答案 3 :(得分:1)

"hello\nworld\nfoo bar\n\n".chomp.split("\n",-1).size # => 4

String#chomp如果存在则删除行尾,-1允许空字符串。

答案 4 :(得分:1)

给定一个文件对象(此处为rails)

file = File.open(File.join(Rails.root, 'lib', 'file.json'))
file.readlines.count

返回行数

IO#readlines使用换行符作为分隔符对字符串(本例中为IOStrings)执行拆分方法

答案 5 :(得分:1)

这不会算空行:

string.split("\n").select{ |line| line != "" }.size