我数不清文件中使用了多少次相同的字符



我有一些文本要检查是否有相同的字符。当我检查时:放入file.count("AB"(。结果:399,但应该是3

alphabet = ["A","B","C","D","E","F","G","H","I","J",
"K","L","M","N","O","P","Q","R","S","T",
"U","V","W","X","Y","Z"," ",".",",",";",
"-","'"
]
file = File.read("vt_00.txt")
i = 0

while i < alphabet.count do
single_char_count = file.count(alphabet[i])
puts "#{alphabet[i]} = #{single_char_count}"
j = 0
while j < alphabet.count do
two_chars = alphabet[i] + alphabet[j]  
two_chars_count = file.count(two_chars)
puts "#{two_chars} = #{two_chars_count}"
j += 1
end
i += 1
end

当我检查时:放入file.count("AB"(。结果:399,但应该是3

String#count以另一种方式工作。

它统计参数中的字符在原始字符串中出现的次数。

例如:

"aaaa aaab".count("ab")
# => 8

您需要的是String#scan

"aaaa aaab".scan("ab").count
# => 1

我相信您的具体问题已经得到了回答。我想建议一种有效的方法来获得所需的子字符串计数。

不需要将子字符串提取到临时数组中,然后返回数组的大小:

"aaba aaab".gsub("ab").count { true }
#=> 2

这使用了未充分利用的String#gsub形式,它是用一个参数调用的,没有块,在这种情况下,它返回一个枚举器(与字符串替换无关(。可以将其想象为方法String#each_match

然后,可枚举的#count对块的值为true的每个匹配进行计数。我有块总是返回true,但"My dog has fleas."也同样有效。

如果您想计算文件中某个模式的次数,可以尝试这样的方法。

2.6.3 :008 > "ab aaa ba ab".scan(/ab/).size
=> 2
2.6.3 :009 > "ab aaa ba ab".scan("ab").size
=> 2
2.6.3 :010 > "ab aaa ba ab".split("ab").size
=> 2

如果你有一个巨大的文件,它在cpu中不是最佳的,但我想在你的情况下会起作用。

最新更新