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


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.


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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.