You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用HashMap统计字符串字符时忽略空格、大写字母和标点?

字符统计HashMap实现方案

嘿,你的思路完全没问题!用HashMap来存储字符和对应的出现次数是最直接的方式,我帮你把代码补全,还分享两种实现方式——一种是基础版适合理解原理,另一种是Java 8+的简化写法。

基础实现(适合理解逻辑)

这个版本和你原来的代码思路一致,补全了缺失的分支,还做了小优化避免重复调用charAt():

public void result(String sentence) {
    // 用菱形语法简化泛型声明(Java 7+支持)
    HashMap<Character, Integer> mp = new HashMap<>();
    
    for (int i = 0; i < sentence.length(); i++) {
        char currentChar = sentence.charAt(i);
        if (mp.containsKey(currentChar)) {
            // 字符已存在,取出当前计数加1后存回去
            int currentCount = mp.get(currentChar);
            mp.put(currentChar, currentCount + 1);
        } else {
            // 字符第一次出现,初始化计数为1
            mp.put(currentChar, 1);
        }
    }
    
    // HashMap的toString()方法刚好会输出你要的{a=2, s=2, k=1,...}格式
    System.out.println(mp);
}

Java 8+简化写法(更紧凑)

如果你的项目用的是Java 8及以上,可以用merge()方法一行搞定计数逻辑,代码更简洁:

public void result(String sentence) {
    HashMap<Character, Integer> mp = new HashMap<>();
    
    // 把字符串转成字符数组遍历,更直观
    for (char c : sentence.toCharArray()) {
        // merge方法逻辑:若key不存在则存1,若存在则把旧值和1相加
        mp.merge(c, 1, Integer::sum);
    }
    
    System.out.println(mp);
}

额外小提示

  • 如果你需要忽略大小写(比如把'A'和'a'算同一个字符),可以在存入前统一转成小写/大写:char currentChar = Character.toLowerCase(sentence.charAt(i));
  • HashMap的输出是无序的,如果需要按字符顺序输出,可以换成TreeMap,输出就会按字符的自然排序展示啦。

内容的提问来源于stack exchange,提问作者tyxod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:48:04