Подтвердить что ты не робот

На языке Ruby, как я могу получить количество строк в строке?

В языке Ruby, как я могу получить количество строк в строке?

4b9b3361

Ответ 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