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

Будьте осторожны с использованием

SET sql_mode = '' 

Это фактически очищает все поддерживаемые режимы. Если вы не хотите связываться с другими настройками, сначала вы хотите сделать

SELECT @@sql_mode 

, чтобы получить список разрешенных разделов с запятыми, затем установите его в этот список без ONLY_FULL_GROUP_BY.

27
задан Just a learner 7 April 2010 в 04:43
поделиться

5 ответов

Существует метод строк для строк, который возвращает перечислитель . Вызовите счетчик счетчик в счетчике.

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

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

Метод строк был введен в Ruby 1.8.7. Если вы используете старую версию, ознакомьтесь с ответами @mipadi и @Greg.

55
ответ дан 28 November 2019 в 04:33
поделиться

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
5
ответ дан the Tin Man 28 November 2019 в 04:33
поделиться

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

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

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

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

1
ответ дан boulder_ruby 28 November 2019 в 04:33
поделиться

Одним из способов может быть подсчет количества окончаний строк (\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 }
7
ответ дан 28 November 2019 в 04:33
поделиться

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

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

1
ответ дан 28 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: