在Ruby语言中,如何获取字符串中的行数?
在Ruby语言中,如何获得字符串中的行数?一种方法是计算行尾数(在Ruby语言中,如何获取字符串中的行数?,ruby,string,count,Ruby,String,Count,在Ruby语言中,如何获得字符串中的行数?一种方法是计算行尾数(\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_strin
\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 }
字符串有一个
行
方法,它返回一个枚举数
。调用枚举器上的count
str = "Hello\nWorld"
str.lines.count # 2
str = "Hello\nWorld\n" # trailing newline is ignored
str.lines.count # 2
Ruby 1.8.7中引入了行方法。如果您使用的是旧版本,请通过@mipadi和@Greg.string.split(“\n”).size
检查答案。如果尾随的新行不包含内容,我喜欢它忽略它们
"Hello\nWorld\n".split("\n") # => ["Hello", "World"]
"hello\nworld\nfoo bar\n\n".split("\n").size # => 3
这可能不是您想要的,所以如果您需要遵守所有新行,请使用@Anurag建议的lines()
"hello\nworld\nfoo bar\n\n".lines.count # => 4
“hello\nworld\nfo bar\n\n”.chomp.split(“\n”,-1).size#=>4
String#chomp
如果存在行尾,则删除行尾,并且-1允许空字符串。给定一个文件对象(在rails中)
返回行数
IO#readlines使用换行符作为分隔符对字符串(本例中为IOString)执行拆分方法这将不计算空行:
string.split("\n").select{ |line| line != "" }.size
“Hello\nWorld\n”.lines.to_a#=>[“Hello\n”,“World\n”]注意,换行符不会被忽略,它们包含在该行中。格雷格,我的意思是为了计算行数而忽略最后一个换行符。@安德鲁,你说得对。对于Ruby 1.8.6和以前的版本,你必须使用count
,每一行
,每一行
,拆分
或其他多种方法之一正如@mipadi和@Greg所建议的,这是我在几十年中见过的最不必要的复杂解决方案minutes@David:这是一行代码。String#line
不是所有版本的Ruby,正如另一个答案中所指出的。IO#readlines可以做到这一点,但基本上就是它所做的(减去size/count方法)除了OP希望字符串中的新行数,而不是文件。**要在rails中执行上述操作,必须将类似的(“config.autoload_paths+=Dir[“#{config.root}/lib/**/”])添加到config/application.rb
string.split("\n").select{ |line| line != "" }.size