113 votes

Trouver le nombre d'occurrences d'un caractère dans une chaîne en Ruby

Je cherche la méthode Ruby (1.9...) qui peut m'aider à trouver le nombre d'occurrences d'un caractère dans une chaîne de caractères. Je cherche 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 cela ?

J'ai utilisé Ruby-doc.org comme référence et la méthode scan dans la classe String a attiré 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 cela en utilisant scan. J'ai partagé quelques solutions dans une vidéo sur comment j'ai réussi.

2 votes

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

155voto

steenslag Points 29662

Si vous voulez juste le nombre de 'a':

puts "Melanie est une débutante".count('a')  #=> 2

Docs pour plus de détails.

20 votes

J'ai vraiment aimé cette réponse jusqu'à ce que je remarque que vous avez juste pris la chaîne de caractères de la question :-) Mais bon +1 quand même.

0 votes

Pourquoi cela ne fonctionne-t-il pas avec des points ? Exemple "voyage.localhost.com".count('www.') => 2. Comment est-ce possible ?

13 votes

@Gediminas compte compte les caractères, pas les chaînes de caractères. "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 de 2.

55voto

Shiv Points 3971

Ce lien provenant d'une question posée précédemment devrait aideranalyser une chaîne en 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/)

renverra

["a","a"]

1 votes

C'est la réponse que je cherchais :)

4 votes

scan fonctionne également avec des chaînes de caractères simples, donc scan('a') peut aussi être utilisé.

30voto

Georg Schölly Points 63123

Vous recherchez la méthode String.index() :

Renvoie l'indice de la première occurrence de la sous-chaîne ou du motif (regexp) donné dans str. Renvoie nil si non trouvé. Si le deuxième paramètre est présent, il spécifie la position dans la chaîne à partir de laquelle commencer la recherche.

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

2voto

Melanie Points 634

J'ai pu résoudre cela en passant une chaîne de caractères à travers scan comme indiqué dans une autre réponse.

Par exemple:

string = 'Ceci est un exemple'
puts string.count('e')

Résultats:

2

J'ai également pu extraire les occurrences en utilisant scan et en passant une chaîne de caractères au lieu d'une expression régulière, ce qui diffère légèrement d'une autre réponse mais m'a aidé à éviter l'utilisation de regex.

string = 'Ceci est un exemple'
puts string.scan('e')

Résultats:

['e','e']

J'ai exploré ces méthodes plus en détail dans une vidéo que j'ai créée après avoir compris le concept.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X