Suchen von # Vorkommen eines Zeichens in einer Zeichenfolge in Ruby

103

Ich suche nach der Ruby-Methode (1.9 ...), mit der ich die Anzahl der Vorkommen eines Zeichens in einer Zeichenfolge ermitteln kann. Ich suche nach allen Vorkommen, nicht nur nach dem ersten.

Zum Beispiel: "Melanie ist ein Noob" Der Buchstabe 'a' kommt in zwei Fällen vor. Welche Ruby-Methode könnte ich verwenden, um dies zu finden?

Ich habe Ruby-doc.org als Referenz verwendet und die scanMethode ist String: classmir aufgefallen . Der Wortlaut ist für mich etwas schwer zu verstehen, daher verstehe ich das Konzept von nicht wirklich scan.

Edit: Ich konnte dies mit lösen scan. Ich habe in einem Video geteilt, wie ich es erreicht habe.

Melanie
quelle
2
Möchten Sie die Anzahl der Vorkommen oder die Indexwerte der Vorkommen in der Zeichenfolge? Zu wissen, wie viele es sind, ist oft nützlich, aber normalerweise lautet die nächste Frage: "Wo sind sie?"
der Blechmann

Antworten:

142

Wenn Sie nur die Anzahl der A's wollen:

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

Docs für weitere Details.

steenslag
quelle
18
Diese Antwort hat mir sehr gut gefallen, bis ich bemerkte, dass Sie gerade die Zeichenfolge aus der Frage genommen haben :-) Trotzdem +1.
Hubro
Warum funktioniert es nicht mit Punkten? Beispiel "voyage.localhost.com" .count ('www.') => 2. Wie kann das sein?
Gediminas
12
@Gediminas countzählt Zeichen, keine Zeichenfolgen. "voyage.localhost.com" .count ('www.') ist dasselbe wie "voyage.localhost.com" .count ('w.') und da es keine
ws
2
Gibt es eine Möglichkeit, einen Link zu den Dokumenten hinzuzufügen ?
Fund Monica Klage
2
Ich war anfangs ziemlich schockiert von dieser Antwort, dann sah ich, dass Melanie das Beispiel zuerst benutzte. Gute Antwort!
AJFaraday
52

Dieser Link von einer zuvor gestellten Frage soll beim Scannen einer Zeichenfolge in Ruby helfen

scan gibt alle Vorkommen einer Zeichenfolge in einer Zeichenfolge als Array zurück

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

wird zurückkehren

["a","a"]
Shiv
quelle
1
Dies ist die Antwort, nach der ich gesucht habe :)
Zippie
3
scanfunktioniert auch mit einfachen Strings, kann also scan('a')auch verwendet werden
Daniel Rikowski
1

Ich konnte dies lösen, indem ich eine Zeichenfolge durchlief, scanwie in einer anderen Antwort gezeigt.

Beispielsweise:

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

Ausgänge:

2

Ich war auch in der Lage, die Vorkommnisse durch Scannen und Durchführen eines Stichs anstelle von Regex zu erfassen, was geringfügig von einer anderen Antwort abweicht, aber hilfreich war, um Regex zu vermeiden.

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

Ausgänge:

['e','e']

Ich habe diese Methoden in einem kleinen Video-Guide weiter untersucht, den ich erstellt habe, nachdem ich es herausgefunden hatte.

Melanie
quelle