在Ruby语言中,如何获取字符串中的行数?
答案 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