Recherche de # occurrences d'un caractère dans une chaîne en Ruby

103

Je recherche la méthode Ruby (1.9 ...) qui peut m'aider à trouver le nombre d'occurrences d'un caractère dans une chaîne. Je recherche toutes les occurrences, pas seulement la première.

Par exemple: "Melanie is a noob" Il y a deux occurrences de la lettre 'a'. Quelle serait la méthode Ruby que je pourrais utiliser pour trouver ceci?

J'ai utilisé Ruby-doc.org comme référence et la scanméthode en question a String: classattiré mon attention. Le libellé est un peu difficile pour moi à comprendre, donc je ne saisis pas vraiment le concept de scan.

Edit: j'ai pu résoudre ce problème en utilisant scan. J'ai partagé dans une vidéo comment je l'ai réalisé.

Mélanie
la source
2
Voulez-vous le nombre d'occurrences ou les valeurs d'index des occurrences dans la chaîne? Savoir combien est souvent utile, mais la question suivante est généralement "où sont-ils?"
le Tin Man

Réponses:

143

Si vous voulez juste le nombre de a:

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

Docs pour plus de détails.

Steenslag
la source
18
J'ai vraiment aimé cette réponse jusqu'à ce que je remarque que vous venez de prendre la chaîne de la question :-) Encore +1 cependant.
Hubro
pourquoi cela ne fonctionne pas avec des points? Exemple "voyage.localhost.com" .count ('www.') => 2. Comment cela peut-il être?
Gediminas
12
@Gediminas countcompte les caractères, pas les chaînes. "voyage.localhost.com" .count ('www.') est identique à "voyage.localhost.com" .count ('w.') et comme il n'y a pas de w et deux points, le résultat est 2.
steenslag
2
Avez-vous une chance d'ajouter un lien vers les documents ?
Fund Monica's Lawsuit
2
J'ai d'abord été assez choquée par cette réponse, puis j'ai vu que Mélanie avait utilisé l'exemple en premier. Bonne réponse!
AJFaraday
52

Ce lien d'une question posée précédemment devrait aider à scanner une chaîne dans Ruby

scan renvoie toutes les occurrences d'une chaîne dans une chaîne sous forme de tableau, donc

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

reviendra

["a","a"]
Shiv
la source
1
C'est la réponse que je cherchais :)
Zippie
3
scanfonctionne aussi avec des cordes simples, donc scan('a')peut également être utilisé
Daniel Rikowski
1

J'ai pu résoudre ce problème en passant une chaîne scancomme indiqué dans une autre réponse.

Par exemple:

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

Les sorties:

2

J'ai également pu extraire les occurrences en utilisant scan et en passant une piqûre au lieu de regex qui varie légèrement d'une autre réponse mais a été utile pour éviter les regex.

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

Les sorties:

['e','e']

J'ai exploré ces méthodes plus en détail dans un petit guide vidéo que j'ai créé après l'avoir compris.

Mélanie
la source