Java 用HashMap计算字符数
我试图计算字符串中的所有字符(“Hello”),但代码不起作用。我只是不知道如何让代码做我想做的 以下是我尝试的原因:Java 用HashMap计算字符数,java,algorithm,hashmap,character,Java,Algorithm,Hashmap,Character,我试图计算字符串中的所有字符(“Hello”),但代码不起作用。我只是不知道如何让代码做我想做的 以下是我尝试的原因: char[] array = hello.toCharArray(); HashMap<Character, Integer> hashMap = new HashMap<>(); // hashMap.put('a', 1); int occurence = 1; char currentChar = ' ';
char[] array = hello.toCharArray();
HashMap<Character, Integer> hashMap = new HashMap<>();
// hashMap.put('a', 1);
int occurence = 1;
char currentChar = ' ';
for (int i = 0; i < array.length; i++) {
hashMap.put(hello.charAt(i), occurence);
currentChar = hello.charAt(i);
for (int j = 0; j < hashMap.size(); j++) {
if (hashMap.containsKey(currentChar)) {
hashMap.put(currentChar, occurence + 1);
}
}
}
System.out.println(hashMap);
}
char[]array=hello.toCharArray();
HashMap HashMap=新的HashMap();
//hashMap.put('a',1);
int发生率=1;
charcurrentchar='';
for(int i=0;i
}
但是,它只打印赋值为2的所有字母。代码中的occurence变量处理不正确 在您的情况下,单循环应该足够了。如下所示,您不需要使用额外的变量,只需根据键从映射本身获取现有计数即可
for (int i = 0; i < array.length; i++) {
char currentChar = hello.charAt(i);
if(hashMap.containsKey(currentChar)) {
hashMap.put(currentChar,hashMap.get(currentChar)+1);
}else{
hashMap.put(currentChar,1);
}
}
for(int i=0;i
Java版本8及更高版本提供了许多强大的映射变异操作
Map<Character,Integer> counts = new HashMap<>();
for (char c : data.toCharArray())
{
counts.merge(c, 1, (oldValue,value)-> oldValue+1 );
}
Map counts=newhashmap();
for(char c:data.toCharArray())
{
合并(c,1,(oldValue,value)->oldValue+1);
}
合并操作要么在映射中创建条目,要么将重新映射函数应用于旧值v1
是第二个参数的副本,以防在重新映射中需要该参数。在您的情况下不是,因为增量是一个常量。以下是一个示例:
String hello = "Hello there";
Map<Character, Integer> count = new HashMap<>();
for (char c : hello.toCharArray()) {
count.compute(c, (ch, n) -> n == null ? 1 : n.intValue() + 1);
}
System.out.println(count);
欢迎来到SO!迭代hashmap(或其大小)没有任何意义——这违背了目的。只需
在一次调用中获取
键并放入
新值,无需j
循环。其次,hashMap.put(hello.charAt(i),occurrence)循环顶部的代码>覆盖映射中以前的值。你只想在地图中根本不存在该项的情况下执行此操作。在我看来,有关如何学习编程或如何调试简单代码的问题更适合于此。更惯用的方法是counts.merge(c,1,Integer::sum)
@ArvindKumarAvinash是,但只有当初始值和增量相同时,这才有效。这是因为Integer::sum
将与旧值和merge()
的第二个参数一起应用。这是一个微妙的点,但我可以想象的情况下,开始值和增量可能不一样。在我的版本中,它是显式的,而在Integer::sum
中,对于经验较少的人来说,它有点“魔力”。谢谢,它就像一个符咒。现在一切都有了意义。
{ =1, r=1, t=1, e=3, h=1, H=1, l=2, o=1}