在 Java 中使用哈希映射查找字符串中字符的频率



我正在尝试制作一个字谜程序,在其中我将哈希映射的所有键集与其值相匹配。但是我的代码似乎没有计算第一个字符以外的字符出现次数。

String a="aabbcc";
HashMap<Character,Integer> map= new HashMap<Character, Integer>();
for(int i=0;i<a.length();i++)
{
if(map.containsKey(a.charAt(i)))
{
int n= map.get(a.charAt(i))+1;
map.put(a.charAt(i), n);
}
else
{
map.put(a.charAt(i), 0);
}
}
System.out.println(map);

输出:

{a=1, b=1, c=1}

按如下方式操作:

import java.util.HashMap;
public class Main {
public static void main(String[] args) {
String a = "aaaabbbccd";
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < a.length(); i++) {
if (map.containsKey(a.charAt(i))) {
int n = map.get(a.charAt(i)) + 1;
map.put(a.charAt(i), n);
} else {
map.put(a.charAt(i), 1);
}
}
System.out.println(map);
}
}

输出:

{a=4, b=3, c=2, d=1}

程序中的所有内容都是正确的,除了您作为0的初始计数。首次将角色放入地图时,其计数应设置为1而不是0。不是吗?

问题出在map.put(a.charAt(i), 0).该 0 应为 1,因为当您第一次找到一个字符时,计数为 1。

当然,你会得到这个结果:)

每个字符 a、b、c 在您的字符串中出现 2 次。 例如,对于第一个"a",您将进入else分支,因为它尚未包含在您的地图中。因此a将被映射到0。然后对于字符串中的第二个"a",您将输入if分支,因为键a已经存在于映射中。并且0将增加到1.你最终会得到a被映射到1.b和c:)也是如此