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.


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.


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.