Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby语言中,如何获取字符串中的行数?_Ruby_String_Count - Fatal编程技术网

在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

在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_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