在Java中如何实现字符串统计工具_Java字符串处理实战解析
发布时间 - 2026-02-01 00:00:00 点击率:次最直接方式是遍历字符串用HashMap统计字符频次,键用Character,避免null异常需用getOrDefault;单词统计应split("\s+")并转小写;流式写法注意chars()对中文不准确,应用codePoints();预处理推荐toLowerCase().replaceAll("1", "")。\p{L}\p{Nd}\s ↩
如何用 HashMap 统计字符串中每个字符出现次数
最直接、可控的方式是遍历字符串,用 HashMap 记录频次。注意 char 是基本类型,Character 才能作为泛型键;遇到空格、换行、标点也要纳入统计(除非业务明确排除)。
常见错误:用 get() 获取旧值后直接 ++,但 get() 返回 null 时会抛 NullPointerException。应改用 getOrDefault(ch, 0)。
示例关键片段:
Mapfreq = new HashMap<>(); for (char ch : str.toCharArray()) { freq.put(ch, freq.getOrDefault(ch, 0) + 1); }
统计单词频次时为什么 split("\\s+") 比 split(" ") 更可靠
split(" ") 只按单个空格切分,遇到制表符、连续空格或首尾空格会产生空字符串,导致 "" 被误计为单词。而 split("\\s+") 匹配一个或多个空白字符(包括 \t、\n、\r),天然过滤掉冗余分隔。
还需注意:英文单词通常需转小写再统计(word.toLowerCase()),否则 "Hello" 和 "hello" 算两个词;中文文本则无

replaceAll("[\\p{Punct}&&[^']]", "") 保留英文撇号(如 don't)。
用 Collectors.groupingBy 实现一行统计的陷阱
Java 8+ 可用流式写法:str.chars().mapToObj(c -> (char) c).collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))。但要注意:
-
str.chars()返回的是IntStream,直接mapToObj(c -> c)会装箱成Integer,必须显式转(char) c否则键类型错 - 中文字符(Unicode 辅助平面)可能被拆成两个
char(代理对),此时chars()无法正确识别单个汉字,应改用codePoints()并映射为String或int - 性能上,流式写法比传统循环慢 2–3 倍,大数据量时不建议无脑用
忽略大小写 + 排除标点的完整预处理怎么做
真实场景中,统计前往往要标准化输入。推荐组合使用:
str.toLowerCase().replaceAll("[^\\p{L}\\p{Nd}\\s]", "") —— 先转小写,再删除所有非字母、非数字、非空白字符。其中 \\p{L} 匹配任意语言字母(含中文、日文平假名等),\\p{Nd} 匹配任意数字,比硬写 [a-z0-9] 更健壮。
若还要保留内部撇号(如英文缩写),可改为:replaceAll("[^\\p{L}\\p{Nd}'\\s]", ""),但需额外 .replaceAll("'+", "'") 合并连续单引号。
这一步漏掉 Unicode 字母支持,会导致中文、阿拉伯文等完全丢失;只删 ASCII 标点(如 [^a-zA-Z0-9\\s])也会让中文句号、顿号残留进单词里。
# word
# java
# 大数据
# 工具
# stream
# 为什么
# String
# Integer
# NULL
# 字符串
# char
# int
# 循环
# Chars
# 泛型
# function
# ASCII
# 遍历
# 流式
# 阿拉伯文
# 但要
# 的是
# 切分
# 多个
# 日文
# 也要
# 英文
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在宝塔面板中修改默认建站目录?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
js实现获取鼠标当前的位置
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
详解vue.js组件化开发实践
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
香港服务器如何优化才能显著提升网站加载速度?
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
详解jQuery中的事件
Python文件异常处理策略_健壮性说明【指导】
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
怎样使用JSON进行数据交换_它有什么限制
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Laravel安装步骤详细教程_Laravel环境搭建指南
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
详解Android中Activity的四大启动模式实验简述
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
如何破解联通资金短缺导致的基站建设难题?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Python自动化办公教程_ExcelWordPDF批量处理案例
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
昵图网官方站入口 昵图网素材图库官网入口
太平洋网站制作公司,网络用语太平洋是什么意思?
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
网站制作企业,网站的banner和导航栏是指什么?
Linux安全能力提升路径_长期防护思维说明【指导】
米侠浏览器网页背景异常怎么办 米侠显示修复
如何在腾讯云服务器上快速搭建个人网站?
Laravel怎么判断请求类型_Laravel Request isMethod用法
网站建设保证美观性,需要考虑的几点问题!
EditPlus中的正则表达式 实战(1)
潮流网站制作头像软件下载,适合母子的网名有哪些?
JavaScript Ajax实现异步通信
高防服务器租用指南:配置选择与快速部署攻略
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel如何使用Telescope进行调试?(安装和使用教程)
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何快速搭建二级域名独立网站?
焦点电影公司作品,电影焦点结局是什么?

