Tìm # lần xuất hiện của một ký tự trong chuỗi trong Ruby


103

Tôi đang tìm phương thức Ruby (1.9 ...) có thể giúp tôi tìm số lần xuất hiện của một ký tự trong một chuỗi. Tôi đang tìm kiếm tất cả các lần xuất hiện, không chỉ lần đầu tiên.

Ví dụ: "Melanie is a noob" Có hai lần xuất hiện của chữ 'a'. Phương thức Ruby mà tôi có thể sử dụng để tìm ra điều này là gì?

Tôi đang sử dụng Ruby-doc.org làm tài liệu tham khảo và scanphương pháp này String: classđã lọt vào mắt tôi. Từ ngữ hơi khó hiểu đối với tôi, vì vậy tôi không thực sự nắm bắt được khái niệm scan.

Chỉnh sửa: Tôi đã có thể giải quyết vấn đề này bằng cách sử dụng scan. Tôi đã chia sẻ trong một video về cách tôi đạt được nó.


2
Bạn muốn số lần xuất hiện hoặc giá trị chỉ số của các lần xuất hiện trong chuỗi? Biết bao nhiêu thường hữu ích, nhưng thường câu hỏi tiếp theo là "chúng ở đâu?"
Tin Man

Câu trả lời:


142

Nếu bạn chỉ muốn số a:

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

Tài liệu để biết thêm chi tiết.


18
Tôi thực sự thích câu trả lời này cho đến khi tôi nhận thấy rằng bạn vừa lấy chuỗi từ câu hỏi :-) Tuy nhiên, vẫn +1.
Hubro

tại sao nó không hoạt động với dấu chấm? Ví dụ "voyage.localhost.com" .count ('www.') => 2. Điều này có thể như thế nào?
Gediminas

12
@Gediminas countđếm các ký tự, không phải chuỗi. "voyage.localhost.com" .count ('www.') giống với "voyage.localhost.com" .count ('w.') và vì không có w và hai dấu chấm nên kết quả là 2.
steenslag

2
Bất kỳ cơ hội nào bạn có thể thêm một liên kết đến tài liệu ?
Vụ kiện Quỹ Monica

2
Ban đầu tôi khá sốc với câu trả lời này, sau đó tôi thấy Melanie đã sử dụng ví dụ trước. Câu trả lời tốt!
AJFaraday

52

Liên kết này từ một câu hỏi được hỏi trước đây sẽ giúp quét một chuỗi trong Ruby

quét trả về tất cả các lần xuất hiện của một chuỗi trong một chuỗi dưới dạng một mảng, vì vậy

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

sẽ trở lại

["a","a"]

1
Đây là câu trả lời tôi đã tìm kiếm :)
Zippie

3
scanlàm việc với đơn giản Strings, quá, vì vậy scan('a')có thể sử dụng như là tốt
Daniel Rikowski

1

Tôi đã có thể giải quyết vấn đề này bằng cách chuyển một chuỗi scannhư được hiển thị trong một câu trả lời khác.

Ví dụ:

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

Kết quả đầu ra:

2

Tôi cũng có thể kéo các lần xuất hiện bằng cách sử dụng quét và chuyển một dấu chấm thay vì regex, điều này hơi khác so với một câu trả lời khác nhưng rất hữu ích để tránh regex.

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

Kết quả đầu ra:

['e','e']

Tôi đã khám phá thêm các phương pháp này trong một video hướng dẫn nhỏ mà tôi đã tạo sau khi tôi tìm ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.