我无法计算文件中使用相同字符的次数

我有一些文字要检查相同的字符。当我检查时: 放置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

liu_xian_fu 回答:我无法计算文件中使用相同字符的次数

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

Enumerable#count然后计算该块的值为真的每个匹配。我让代码块始终返回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中不是最佳选择,但是我认为可以使用。

本文链接:https://www.f2er.com/3141931.html

大家都在问