В языке Ruby, как я могу получить количество строк в строке?
На языке Ruby, как я могу получить количество строк в строке?
Ответ 1
Существует метод 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.
Ответ 2
Один из способов - подсчитать количество окончаний строк (\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 }
Ответ 3
string".split("\n").size
работает красиво. Мне нравится, что он игнорирует завершающие новые строки, если они не содержат контент.
"Hello\nWorld\n".split("\n") # => ["Hello", "World"]
"hello\nworld\nfoo bar\n\n".split("\n").size # => 3
Возможно, это не так, как вы хотите, поэтому используйте lines()
как @Anurag вместо этого, если вам нужно почтить все новые строки.
"hello\nworld\nfoo bar\n\n".lines.count # => 4
Ответ 4
"hello\nworld\nfoo bar\n\n".chomp.split("\n",-1).size # => 4
String#chomp
избавляется от конца строки, если он существует, а -1 допускает пустые строки.
Ответ 5
задан файл-объект (здесь, в рельсах)
file = File.open(File.join(Rails.root, 'lib', 'file.json'))
file.readlines.count
возвращает количество строк
IO # readlines выполняет разделенный метод в строках (IOStrings в этом случае) с использованием новых строк в качестве разделителя
Ответ 6
Это не будет считать пустые строки:
string.split("\n").select{ |line| line != "" }.size