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

Jus*_*ner 27 ruby string count

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

Anu*_*rag 55

有一个lines返回一个字符串的方法Enumerator.呼吁count调查员.

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

str = "Hello\nWorld\n" # trailing newline is ignored
str.lines.count # 2
Run Code Online (Sandbox Code Playgroud)

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


mip*_*adi 7

一种方法是计数行尾的号码(\n或者\r\n,取决于字符串),需要提醒的是,如果字符串并没有在一个新行结束,你必须确保添加一个到您的计数.您可以使用以下内容执行此操作:

c = my_string.count("\n")
c += 1 unless c[-1,1] == "\n"
Run Code Online (Sandbox Code Playgroud)

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

c = 0
my_string.each { |line| c += 1 }
Run Code Online (Sandbox Code Playgroud)

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

c = my_string.each.inject(0) { |count, line| count += 1 }
Run Code Online (Sandbox Code Playgroud)


the*_*Man 5

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

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

那可能不是您想要的,因此lines(),如果需要使用所有换行符,请使用@Anurag的建议。

"hello\nworld\nfoo bar\n\n".lines.count # => 4
Run Code Online (Sandbox Code Playgroud)