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


103

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

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

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

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


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

Ответы:


143

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

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

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


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']

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.