0

0

在Java中如何编写简单的文本统计程序_Java字符串处理项目解析

P粉602998670

P粉602998670

发布时间:2026-01-23 11:26:03

|

913人浏览过

|

来源于php中文网

原创

统计字符频次用HashMap遍历toCharArray()最稳妥,注意大小写和空白符处理;单词统计先清洗标点再split("s+")并过滤空串;文件读取用Files.lines()防OOM,注意编码和路径;输出用stream排序+String.format对齐。

在java中如何编写简单的文本统计程序_java字符串处理项目解析

统计字符串中每个字符出现次数

直接用 HashMap<character integer></character> 遍历字符是最稳妥的方式,避免用 String.charAt() 配合 String.indexOf() 这类低效组合。注意区分大小写和空白符——如果需求是“忽略大小写”,得先调用 toLowerCase();如果要跳过空格、换行等,需显式判断 Character.isWhitespace(c)

常见错误是把 char 当作 String 传给 put(),导致编译失败;或在循环里反复调用 map.get(c) == null 而不是用 getOrDefault(c, 0),多一次哈希查找。

Map<Character, Integer> count = new HashMap<>();
for (char c : text.toCharArray()) {
    if (Character.isWhitespace(c)) continue;
    count.put(c, count.getOrDefault(c, 0) + 1);
}

按单词统计频次(不依赖正则)

String.split("\s+") 简单但有隐患:它无法处理标点粘连,比如 "hello,world" 会被当做一个词。更健壮的做法是用 StreamTokenizer 或手动扫描——但对简单项目,先用 replaceAll("[^a-zA-Z0-9\s]", " ") 清洗再分割更直观。

注意 split(" ")split("\s+") 的区别:前者只切空格,后者切所有空白符(包括制表、换行),且能自动合并连续空白;空字符串过滤必须加 .filter(s -> !s.isEmpty()),否则数组头尾可能有空项。

立即学习Java免费学习笔记(深入)”;

腾讯交互翻译
腾讯交互翻译

腾讯AI Lab发布的一款AI辅助翻译产品

下载
String cleaned = text.replaceAll("[^a-zA-Z0-9\s]", " ");
String[] words = cleaned.split("\s+");
Map<String, Integer> wordCount = new HashMap<>();
for (String w : words) {
    if (!w.isEmpty()) {
        wordCount.put(w.toLowerCase(), wordCount.getOrDefault(w.toLowerCase(), 0) + 1);
    }
}

读取文件并统计时的编码与异常处理

Files.readAllLines(path, StandardCharsets.UTF_8)FileReader 更安全,后者默认用系统编码,中文 Windows 下容易乱码。必须捕获 IOException,不能只写 throws 丢给上层——命令行工具没人接这个异常。

大文件别用 readAllLines(),会 OOM;改用 Files.lines(path) 返回 Stream<String>,配合 try-with-resources 自动关闭。另外,路径含空格或中文时,确保传入的是 Path 对象而非裸字符串,避免 java.nio.file.InvalidPathException

  • Paths.get("data.txt")new File("data.txt").toPath() 更推荐
  • 统计前检查文件是否存在:Files.exists(path),避免 FileNotFoundException
  • 空文件要单独处理,lines.count() 为 0 时别直接进统计逻辑

输出结果时保留排序与格式对齐

Java 默认 HashMap 不保证顺序,想按频次降序输出得转成 LinkedHashMap 或用 stream().sorted()。别用 Collections.sort(list) 手动排序 list 再遍历 map——效率低还容易索引错位。

控制台对齐靠 String.format("%-15s %d", word, count),其中 %-15s 表示左对齐、占15字符宽;数字用 %6d 右对齐更清晰。如果导出 CSV,记得对字段中的逗号、换行做转义,否则 Excel 打开会错列。

wordCount.entrySet().stream()
    .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
    .limit(10)
    .forEach(e -> System.out.println(String.format("%-20s %6d", e.getKey(), e.getValue())));
实际跑起来最常卡在文件编码和标点清洗这两步,尤其是测试用的文本从网页复制过来,藏着零宽空格或软连字符,length() 看着正常,split() 却分不出词。先用 text.codePoints().forEach(System.out::println) 打印码点,比猜快得多。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1030

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

409

2023.09.04

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

267

2025.12.04

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

887

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

461

2024.06.27

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 21.1万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号