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é.


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.


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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.