web-dev-qa-db-ja.com

Ruby言語で、文字列の行数を取得するにはどうすればよいですか?

Ruby言語で、文字列の行数を取得するにはどうすればよいですか?

27
Just a learner

linesを返す文字列用のEnumeratorメソッドがあります。列挙子でcountを呼び出します。

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

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

linesメソッドはRuby 1.8.7で導入されました。古いバージョンを使用している場合は、@ mipadiと@Gregによる回答を確認してください。 ==

54
Anurag

1つの方法は、行末の数を数えることです(\nまたは\r\n、文字列によって異なります)、注意点は、文字列がnotで終わる場合は、必ず1をカウントに追加する必要があるということです。あなたは以下でそうすることができます:

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 }
6
mipadi

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
_
4
the Tin Man

これは空白行をカウントしません:

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

与えられたファイルオブジェクト(ここでは、Railsで)

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

行数を返します

IO#readlinesは、改行を区切り文字として使用して、文字列(この場合はIOStrings)に対してsplitメソッドを実行します

1
boulder_ruby

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

String#chompは行末が存在する場合はそれを取り除き、-1は空の文字列を許可します。

1
Andrew Grimm