2011-03-23 28 views
93

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

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

He estado usando Ruby-doc.org como referencia y el método de escaneo en la clase String, en particular, me llamó la atención. Sin embargo, la redacción es un poco difícil para mí, así que realmente no entiendo el concepto de escanear.

+2

¿Quieres que el número de ocurrencias, o los valores del índice de las ocurrencias de la cadena? Saber cuántos a menudo es útil, pero por lo general la siguiente pregunta es "¿dónde están?" –

Respuesta

124

Si lo que desea es el número de una de:

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

I * really * le gustó esta respuesta hasta que noté que acaba de tomar la cadena de la pregunta :-) Aún +1 sin embargo. – Hubro

+0

¿por qué no funciona con puntos? Ejemplo "voyage.localhost.com" .count ('www.') => 2. ¿Cómo puede ser esto? – Gediminas

+11

@Gediminas 'count' cuenta los caracteres, no las cadenas. "voyage.localhost.com" .count ('www.') es lo mismo que "voyage.localhost.com" .count ('w.') y como no hay w's y dos puntos, el resultado es 2. – steenslag

49

Este enlace de una pregunta formulada anteriormente debe ayudar scanning a string in Ruby

exploración devuelve todas las ocurrencias 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

'scan' también funciona con Strings simples, así' scan ('a') 'también se puede usar –

28

Usted está buscando el String.index() método:

Devuelve el índice de la primera aparición de de la subcadena o el patrón (regexp) en str. Devuelve nil si no se encuentra. Si está presente el segundo parámetro , especifica la posición en la cadena para comenzar la búsqueda.

"hello".index('e')    #=> 1 
"hello".index('lo')   #=> 3 
"hello".index('a')    #=> nil 
"hello".index(?e)    #=> 1 
"hello".index(/[aeiou]/, -3) #=> 4 
+3

¡Nunca se supo que se podía insertar código en bloques de comillas! Neat – Hubro

Cuestiones relacionadas