Java统计字符串中每个字母出现次数的代码结果错误,如何排查?
代码存在两处核心错误:
- 存取的键类型不匹配,导致每次查询都返回null
你调用map.get(A.charAt(i))时传入的是char类型的键,但put的时候存的是String.valueOf(A.charAt(i))生成的字符串类型的键。HashMap判断键相等时会同时校验类型,字符'a'和字符串"a"是完全不同的键,因此每次get都会返回null,永远只会执行值设为1的分支,这是输出所有值都为1的直接原因。你可以统一用Character作为键的类型,也可以在get时也将字符转为String,保证存取的键类型一致即可。 - 计数逻辑错误,没有对已有次数做累加
就算修复了键类型的问题,你else分支中写的是map.put(..., i+1),这里的i是循环的索引,不是累计的次数,正确写法应该是取已有的值value加1后存入。
修正后的代码参考:
import java.util.HashMap; public class ConsecutiveCharacters { public static String solve(String A, int B) { HashMap<Character, Integer> map = new HashMap<>(); for (int i = 0; i < A.length(); i++) { char c = A.charAt(i); Integer value = map.get(c); if(value == null){ map.put(c, 1); } else { map.put(c, value + 1); } } System.out.println(map); String text = "i feel good"; return text; } public static void main(String[] args) { solve("aabbccd",2); } }
运行后输出结果为{a=2, b=2, c=2, d=1},和预期一致。
内容的提问来源于stack exchange,提问作者Rasika Joshi
相关产品推荐
相关产品推荐

