На языке Ruby, как я могу получить количество строк в строке? - PullRequest
26 голосов
/ 07 апреля 2010

Как на языке Ruby узнать количество строк в строке?

Ответы [ 6 ]

54 голосов
/ 07 апреля 2010

Существует метод 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.

6 голосов
/ 07 апреля 2010

Одним из способов может быть подсчет количества концов строк (\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 }
4 голосов
/ 07 апреля 2010

string".split("\n").size работает хорошо.Мне нравится, что он игнорирует конечные строки, если они не содержат контента.

"Hello\nWorld\n".split("\n") # => ["Hello", "World"]
"hello\nworld\nfoo bar\n\n".split("\n").size # => 3

Возможно, это не то, что вам нужно, поэтому используйте lines(), как предложено @Anurag, если вам нужно соблюдать все новые строки.

1 голос
/ 08 октября 2014

Это не будет считать пустые строки:

string.split("\n").select{ |line| line != "" }.size
1 голос
/ 10 августа 2012

для данного файлового объекта (здесь, в rails)

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

возвращает количество строк

IO # readlines выполняет метод разбиения на строки (в данном случае IOStrings), используя символы новой строкив качестве разделителя

1 голос
/ 10 апреля 2010

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

String#chomp удаляет конец строки, если он существует, а -1 допускает пустые строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...