在Java中使用哈希映射来查找字符串中字符的频率[关闭]
Posted
技术标签:
【中文标题】在Java中使用哈希映射来查找字符串中字符的频率[关闭]【英文标题】:Using hash maps in Java to find frequency of characters in a string [closed] 【发布时间】:2020-05-22 10:36:43 【问题描述】:我正在尝试制作一个字谜程序,其中我将哈希映射的所有键集与其值匹配。但是我的代码似乎没有计算第一个字符之外的字符的出现次数。
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
【问题讨论】:
因为你从零开始计数。... else map.put(a.charAt(i), 1); ...
!
【参考方案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
。不是吗?
【讨论】:
【参考方案2】:问题在map.put(a.charAt(i), 0)
。那个 0 应该是 1,因为当你第一次找到一个字符时,计数是 1。
【讨论】:
【参考方案3】:当然你会得到这个结果:)
每个字符 a、b、c 在您的字符串中出现 2 次。
现在例如,对于第一个“a”,您将进入else
分支,因为它尚未包含在您的地图中。因此a
将映射到0
。然后对于字符串中的第二个“a”,您将输入 if
分支,因为键 a
已经存在于地图中。而0
将增加到1
。你最终会得到a
被映射到1
。 b 和 c 也一样 :)
【讨论】:
以上是关于在Java中使用哈希映射来查找字符串中字符的频率[关闭]的主要内容,如果未能解决你的问题,请参考以下文章