用hashmap统计单词频率需先将文本转小写并用“w+”拆分为单词数组,再遍历更新key-value;若需保留缩写如"don't",应采用更精细正则匹配。

用 HashMap 统计文本单词频率,核心是把每个单词作为 key,出现次数作为 value,边遍历边更新计数。
准备文本并切分成单词
先获取原始文本(字符串),再按空格、标点等分隔符拆成单词数组。推荐用正则 \W+ 匹配非单词字符,避免手动处理逗号句号:
- String[] words = text.toLowerCase().split("\W+"); —— 转小写统一大小写,用 \W+ 拆分,自动过滤空字符串
- 如果需要保留英文缩写(如 "don't"),可用更精细正则,例如 "[^a-zA-Z']+|'(?![a-zA-Z])|(?,但日常统计通常用 \W+ 足够
用 HashMap 累加计数
遍历单词数组,对每个单词检查是否已存在:存在则 value +1,不存在则 put(单词, 1)。Java 8+ 可用 merge() 或 compute() 简化逻辑:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- map.merge(word, 1, Integer::sum); —— 最简洁:若 key 存在,用 sum 合并旧值和 1;不存在则设为 1
- map.put(word, map.getOrDefault(word, 0) + 1); —— 兼容性更好,语义清晰
- 注意跳过空字符串(split 可能产生),加个 if (word.isEmpty()) continue;
输出或使用统计结果
统计完后,HashMap 已存好所有单词频次。常用操作:
- 遍历输出:for (Map.Entry
entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } - 找最高频词:可转成 list 排序,或遍历时记录 max 值和对应 key
- 查某个词:int count = map.getOrDefault("java", 0);
完整示例代码片段
整合起来不到 10 行核心代码:
String text = "Hello world! Hello Java. Java is great.";
Map<string integer> freq = new HashMap();
for (String word : text.toLowerCase().split("\W+")) {
if (word.isEmpty()) continue;
freq.merge(word, 1, Integer::sum);
}
// 输出:{hello=2, world=1, java=2, is=1, great=1}
</string>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










