在Ruby中查找字符串中字符的出现次数

111
我正在寻找Ruby方法(1.9...)来帮助我在字符串中找到字符出现的次数。我想要找到所有的出现次数,而不仅仅是第一个。
例如:"Melanie is a noob" 字母'a'出现了两次。 我应该使用哪个Ruby方法来找到这个?
我一直在使用Ruby-doc.org作为参考,发现了String类中的scan方法。但是其中的措辞对我来说有些难以理解,所以我并没有完全掌握scan的概念。
编辑:我已经通过使用scan解决了这个问题。我在一个视频中分享了几种解决方案

2
你想要字符串中出现的次数还是出现位置的索引值?知道有多少次出现通常很有用,但通常下一个问题是“它们在哪里?” - the Tin Man
3个回答

154
如果你只想要'a'的数量:
puts "Melanie is a noob".count('a')  #=> 2

详细文档请点击此处。


为什么点号不能正常工作?例如:"voyage.localhost.com".count('www.') => 2。这是怎么回事? - Gediminas Šukys
13
count函数计算字符个数而不是字符串个数。"voyage.localhost.com".count('www.') 和 "voyage.localhost.com".count('w.') 是相同的,因为它们都会计算字符数。由于字符串中不存在 w 字符,而有两个点号,所以结果为 2。 - steenslag
3
你能否添加一个文档链接 - anon
3
起初我对这个答案感到很震惊,但后来我看到Melanie先用了这个例子。好的回答! - AJFaraday
@Hubro和AJFaraday:哈!是啊,如果OP说的“字符出现次数”中的“字符”是一个双关语,并且她使用了像“特朗普”这样的示例字符串,那么我会非常印象深刻 - 你知道,在“特朗普”中,“_a_字符”的出现次数将为0。;) - Tom
我喜欢Ruby语言,因为它有这样的方法!简单而实用 :) - Michał Zalewski

55

这个之前提出的问题中的链接应该会有所帮助:在 Ruby 中扫描字符串

scan 方法将所有匹配的字符串以数组形式返回,因此

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

将返回

["a","a"]

1
这就是我一直在寻找的答案 :) - Zippie
4
scan 也可以处理简单的字符串,因此 scan('a') 也可以使用。 - Daniel Rikowski

2
我能够通过将字符串传递给scan来解决这个问题,就像另一个答案中所示。
例如:
string = 'This is an example'
puts string.count('e')

输出:

2

我还能通过使用scan并传递一个字符串而不是正则表达式来提取出现次数,这与另一个答案略有不同,但在避免正则表达式方面非常有帮助。

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

输出:

['e','e']

我在弄明白之后,进一步探索了这些方法,然后创建了一个视频

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接