Ruby言語で、文字列の行数を取得するにはどうすればよいですか?
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による回答を確認してください。 ==
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 }
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
_
これは空白行をカウントしません:
string.split("\n").select{ |line| line != "" }.size
与えられたファイルオブジェクト(ここでは、Railsで)
file = File.open(File.join(Rails.root, 'lib', 'file.json'))
file.readlines.count
行数を返します
IO#readlinesは、改行を区切り文字として使用して、文字列(この場合はIOStrings)に対してsplitメソッドを実行します
"hello\nworld\nfoo bar\n\n".chomp.split("\n",-1).size # => 4
String#chomp
は行末が存在する場合はそれを取り除き、-1は空の文字列を許可します。