Znajdowanie # wystąpień znaku w łańcuchu w języku Ruby

103

Szukam metody Ruby (1,9 ...), która pomoże mi znaleźć liczbę wystąpień znaku w ciągu. Szukam wszystkich wystąpień, nie tylko pierwszego.

Na przykład: „Melanie jest noobem” Istnieją dwa wystąpienia litery „a”. Jaka byłaby metoda Rubiego, której mógłbym użyć, aby to znaleźć?

Używam Ruby-doc.org jako odniesienia, a scanmetoda String: classprzykuła moją uwagę. Sformułowanie jest dla mnie trochę trudne do zrozumienia, więc tak naprawdę nie rozumiem pojęcia scan.

Edycja: udało mi się to rozwiązać za pomocą scan. Udostępniłem w filmie, jak to osiągnąłem.

Melanie
źródło
2
Czy chcesz określić liczbę wystąpień, czy też wartości indeksów wystąpień w ciągu? Znajomość ich liczby jest często przydatna, ale zazwyczaj następnym pytaniem jest „gdzie oni są?”
Tin Man

Odpowiedzi:

143

Jeśli chcesz tylko liczbę „a”:

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

Dokumenty, aby uzyskać więcej informacji.

steenslag
źródło
18
Ja naprawdę lubiłem tę odpowiedź, aż zauważyłem, że po prostu wziął łańcuch od kwestii :-) Still +1 chociaż.
Hubro
dlaczego nie działa z kropkami? Przykład „voyage.localhost.com” .count ('www.') => 2. Jak to może być?
Gediminas,
12
@Gediminas countliczy znaki, a nie ciągi. „voyage.localhost.com” .count („www.”) jest tym samym, co „voyage.localhost.com” .count („w.”), a ponieważ nie ma w ani dwóch kropek, wynikiem jest 2.
steenslag
2
Czy możesz dodać link do dokumentów ?
Załóż pozew Moniki,
2
Początkowo byłem zszokowany tą odpowiedzią, potem zobaczyłem, że Melanie jako pierwsza użyła przykładu. Dobra odpowiedź!
AJFaraday
52

Ten link z pytania zadanego wcześniej powinien pomóc w skanowaniu łańcucha w Rubim

scan zwraca wszystkie wystąpienia łańcucha w ciągu jako tablicę, więc

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

wróci

["a","a"]
Shiv
źródło
1
To jest odpowiedź, której szukałem :)
Zippie
3
scandziała również z prostymi strunami, więc scan('a')można go również używać
Daniel Rikowski
1

Udało mi się to rozwiązać, przepuszczając ciąg, scanjak pokazano w innej odpowiedzi.

Na przykład:

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

Wyjścia:

2

Byłem również w stanie wyciągnąć wystąpienia, używając skanowania i przepuszczając żądło zamiast wyrażenia regularnego, które różni się nieznacznie od innej odpowiedzi, ale było pomocne w unikaniu wyrażenia regularnego.

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

Wyjścia:

['e','e']

Zbadałem te metody dokładniej w małym przewodniku wideo, który stworzyłem po tym, jak to rozgryzłem.

Melanie
źródło