Поиск # вхождений символа в строке в Ruby

103

Я ищу метод Ruby (1.9 ...), который может помочь мне найти количество вхождений символа в строку. Я ищу все вхождения, а не только первое.

Например: «Мелани - нуб». Буква «а» встречается дважды. Какой метод Ruby я мог бы использовать, чтобы найти это?

Я использовал Ruby-doc.org в качестве справочника, и этот scanметод String: classпривлек мое внимание. Формулировку мне немного сложно понять, поэтому я не совсем понимаю концепцию scan.

Изменить: я смог решить эту проблему, используя scan. Я поделился в видео, как мне это удалось.

Мелани
источник
2
Вам нужно количество вхождений или значения индекса вхождений в строке? Часто полезно знать, сколько их, но обычно следующий вопрос - «где они?»
Железный Человек

Ответы:

143

Если вам просто нужно количество а:

puts "Melanie is a noob".count('a')  #=> 2

Документы для более подробной информации.

Steenslag
источник
18
Мне очень понравился этот ответ, пока я не заметил, что вы просто взяли строку из вопроса :-) Тем не менее, +1.
Hubro
почему не работает с точками? Пример "voyage.localhost.com" .count ('www.') => 2. Как такое может быть?
Гедиминас
12
@Gediminas countсчитает символы, а не строки. "voyage.localhost.com" .count ('www.') то же самое, что "voyage.localhost.com" .count ('w.'), и поскольку нет w и двух точек, результат равен 2.
steenslag
2
Есть ли шанс добавить ссылку на документы ?
Фонд иска Моники
2
Сначала я был шокирован этим ответом, но потом увидел, что Мелани первой использовала этот пример. Хороший ответ!
AJFaraday
52

Эта ссылка из заданного ранее вопроса должна помочь сканировать строку в Ruby.

scan возвращает все вхождения строки в строку как массив, поэтому

"Melanie is a noob".scan(/a/)

вернется

["a","a"]
Шив
источник
1
Это ответ, который я искал :)
Зиппи
3
scanработает и с простыми строками, поэтому также scan('a')можно использовать
Дэниел Риковски
1

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

Например:

string = 'This is an example'
puts string.count('e')

Выходы:

2

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

string = 'This is an example'
puts string.scan('e')

Выходы:

['e','e']

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

Мелани
источник