Menemukan # kemunculan karakter dalam string di Ruby

103

Saya mencari metode Ruby (1.9 ...) yang dapat membantu saya menemukan jumlah kemunculan karakter dalam sebuah string. Saya mencari semua kejadian, bukan hanya yang pertama.

Misalnya: "Melanie adalah noob" Ada dua kemunculan huruf 'a'. Apa metode Ruby yang dapat saya gunakan untuk menemukan ini?

Saya telah menggunakan Ruby-doc.org sebagai referensi dan scanmetode yang String: classmenarik perhatian saya. Kata-katanya agak sulit untuk saya pahami, jadi saya tidak terlalu memahami konsepnya scan.

Sunting: Saya bisa menyelesaikan ini menggunakan scan. Saya berbagi dalam video bagaimana saya mencapainya.

Melanie
sumber
2
Apakah Anda menginginkan jumlah kemunculan, atau nilai indeks kejadian dalam string? Mengetahui berapa banyak yang sering berguna, tetapi biasanya pertanyaan berikutnya adalah "di mana mereka?"
Tin Man

Jawaban:

143

Jika Anda hanya menginginkan bilangan a:

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

Docs untuk lebih jelasnya.

steenslag.dll
sumber
18
Saya sangat menyukai jawaban ini sampai saya perhatikan bahwa Anda baru saja mengambil string dari pertanyaan :-) Meskipun demikian, masih +1.
Hubro
mengapa tidak berfungsi dengan titik? Contoh "voyage.localhost.com" .count ('www.') => 2. Bagaimana ini bisa terjadi?
Gediminas
12
@Gediminas countmenghitung karakter, bukan string. "voyage.localhost.com" .count ('www.') sama dengan "voyage.localhost.com" .count ('w.') dan karena tidak ada w dan dua titik hasilnya adalah 2.
steenslag
2
Adakah kemungkinan Anda bisa menambahkan tautan ke dokumen ?
Gugatan Dana Monica
2
Saya awalnya cukup kaget dengan jawaban ini, kemudian saya melihat bahwa Melanie menggunakan contoh dulu. Jawaban yang bagus!
AJFaraday
52

Tautan ini dari pertanyaan yang ditanyakan sebelumnya akan membantu memindai string di Ruby

scan mengembalikan semua kemunculan string dalam string sebagai array, jadi

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

akan kembali

["a","a"]
Pisau
sumber
1
Ini adalah jawaban yang saya cari :)
Zippie
3
scanbekerja dengan Strings sederhana, juga, jadi scan('a')bisa digunakan juga
Daniel Rikowski
1

Saya bisa menyelesaikan ini dengan melewatkan string scanseperti yang ditunjukkan dalam jawaban lain.

Sebagai contoh:

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

Keluaran:

2

Saya juga dapat menarik kejadian dengan menggunakan scan dan melewati sengatan alih-alih regex yang sedikit berbeda dari jawaban lain tetapi membantu untuk menghindari regex.

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

Keluaran:

['e','e']

Saya menjelajahi metode ini lebih jauh dalam panduan video kecil yang saya buat setelah saya mengetahuinya.

Melanie
sumber