Ruby'de bir dizede bir karakterin # oluşumunu bulma


103

Bir dizedeki bir karakterin oluşum sayısını bulmama yardımcı olabilecek Ruby yöntemini (1.9 ...) arıyorum. Sadece ilkini değil, tüm olayları arıyorum.

Örneğin: "Melanie bir çaylaktır" 'a' harfinin iki oluşumu vardır. Bunu bulmak için kullanabileceğim Ruby yöntemi ne olabilir?

Ruby-doc.org'u referans olarak kullanıyorum scanve String: classgözüme çarpan yöntem . İfadeleri anlamak benim için biraz zor, bu yüzden kavramını gerçekten anlamıyorum scan.

Düzenleme: Bunu kullanarak çözebildim scan. Bunu nasıl başardığımı bir videoda paylaştım .


2
Dizedeki oluşumların sayısını mı yoksa oluşumların dizin değerlerini mi istiyorsunuz? Kaçının genellikle yararlı olduğunu bilmek, ancak genellikle sonraki soru "neredeler?"
The Tin Man

Yanıtlar:


143

Sadece a sayısını istiyorsanız:

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

Daha fazla ayrıntı için Dokümanlar .


18
Ben gerçekten ben sadece :-) Yine 1 olsa sorudan dize aldı fark kadar bu cevabı hoşuma gitti.
Hubro

neden noktalarla çalışmıyor? Örnek "voyage.localhost.com" .count ('www.') => 2. Bu nasıl olabilir?
Gediminas

12
@Gediminas countkarakterleri sayar, dizeleri değil. "voyage.localhost.com" .count ("www.") "voyage.localhost.com" .count ("w.") ile aynıdır ve w ve iki nokta olmadığından sonuç 2'dir.
steenslag

2
Dokümanlara bağlantı ekleme şansınız var mı?
Fund Monica'nın Davası

2
Başlangıçta bu cevap beni oldukça şaşırttı, sonra Melanie'nin ilk örneği kullandığını gördüm. İyi cevap!
AJFaraday

52

Daha önce sorulan bir sorudaki bu bağlantı, Ruby'de bir dizenin taranmasına yardımcı olmalıdır

tarama, bir dizedeki bir dizenin tüm oluşumlarını bir dizi olarak döndürür, bu nedenle

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

dönecek

["a","a"]

1
Bu aradığım cevap :)
Zippie

3
scanbasit Dizelerle de çalışır, bu yüzden scan('a')de kullanılabilir
Daniel Rikowski

1

Bunu, scanbaşka bir cevapta gösterildiği gibi bir dizeyi geçerek çözebildim .

Örneğin:

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

Çıktılar:

2

Ayrıca, başka bir cevaptan biraz farklı olan ancak normal ifadeden kaçınmak için yardımcı olan normal ifade yerine taramayı kullanarak ve bir iğneyi geçerek olayları çekebildim.

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

Çıktılar:

['e','e']

Bu yöntemleri, anladıktan sonra oluşturduğum küçük bir video rehberinde daha ayrıntılı olarak inceledim .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.