Encontrar # apariciones de un carácter en una cadena en Ruby

103

Estoy buscando el método Ruby (1.9 ...) que me puede ayudar a encontrar el número de apariciones de un carácter en una cadena. Estoy buscando todas las ocurrencias, no solo la primera.

Por ejemplo: "Melanie es una noob" Hay dos apariciones de la letra 'a'. ¿Cuál sería el método Ruby que podría usar para encontrar esto?

He estado usando Ruby-doc.org como referencia y el scanmétodo en el String: classme llamó la atención. La redacción me resulta un poco difícil de entender, por lo que realmente no entiendo el concepto de scan.

Editar: pude resolver esto usando scan. Compartí en un video cómo lo logré.

Melanie
fuente
2
¿Quiere el número de apariciones o los valores de índice de las apariciones en la cadena? Saber cuántos suele ser útil, pero normalmente la siguiente pregunta es "¿dónde están?"
The Tin Man

Respuestas:

142

Si solo quiere el número de a:

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

Docs para obtener más detalles.

Steenslag
fuente
18
Realmente me gustó esta respuesta hasta que noté que simplemente tomaste la cadena de la pregunta :-) Aún así, +1.
Hubro
¿Por qué no funciona con puntos? Ejemplo "voyage.localhost.com" .count ('www.') => 2. ¿Cómo puede ser esto?
Gediminas
12
@Gediminas countcuenta caracteres, no cadenas. "voyage.localhost.com" .count ('www.') es lo mismo que "voyage.localhost.com" .count ('w.') y como no hay w y dos puntos, el resultado es 2.
steenslag
2
¿Alguna posibilidad de que pueda agregar un enlace a los documentos ?
Financia la demanda de Monica el
2
Al principio me sorprendió bastante esta respuesta, luego vi que Melanie usó el ejemplo primero. ¡Buena respuesta!
AJFaraday
52

Este enlace de una pregunta que se hizo anteriormente debería ayudar a escanear una cadena en Ruby

scan devuelve todas las apariciones de una cadena en una cadena como una matriz, por lo que

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

volverá

["a","a"]
Shiv
fuente
1
Esta es la respuesta que estaba buscando :)
Zippie
3
scanTambién funciona con cadenas simples, por lo que también se scan('a')pueden usar
Daniel Rikowski
1

Pude resolver esto pasando una cadena scancomo se muestra en otra respuesta.

Por ejemplo:

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

Salidas:

2

También pude extraer las ocurrencias usando escaneo y pasando una picadura en lugar de una expresión regular, que varía ligeramente de otra respuesta, pero fue útil para evitar la expresión regular.

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

Salidas:

['e','e']

Exploré estos métodos más a fondo en una pequeña guía de video que creé después de descubrirlo.

Melanie
fuente