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

雨瑶酱_7510

雨瑶酱_7510

2026-01-23

973人浏览

原创

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

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

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

直接用 HashMap 遍历字符是最稳妥的方式,避免用 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);
}</character>

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

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

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

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);
    }
}</string>

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

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

javascript-typescript-typescript-scaffold
javascript-typescript-typescript-scaffold

你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型

下载

大文件别用 readAllLines(),会 OOM;改用 Files.lines(path) 返回 Stream,配合 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())));</string>

实际跑起来最常卡在文件编码和标点清洗这两步,尤其是测试用的文本从网页复制过来,藏着零宽空格或软连字符,length() 看着正常,split() 却分不出词。先用 text.codePoints().forEach(System.out::println) 打印码点,比猜快得多。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
Java I/O 与 NIO 编程体系合集
Java I/O 与 NIO 编程体系合集

全面讲解 Java I/O 编程的演进与核心 API,涵盖传统 I/O 的字节流(InputStream/OutputStream)与字符流(Reader/Writer)体系、装饰器模式在 I/O 中的应用(BufferedReader/InputStreamReader)、文件读写与目录操作、NIO 核心三要素(Buffer 缓冲区/Channel 通道/Selector 选择器)、ByteBuffer 操作与内存映射文件(Mappe

2026.04.29

532

28

string转int
string转int

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

2023.08.02

7579

3

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

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

2023.09.22

569

3

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

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

2024.03.01

1698

6

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

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

2023.11.20

3968

5

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

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

2023.09.04

1158

7

php中foreach用法
php中foreach用法

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

2025.12.04

858

13

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

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

2023.07.31

1869

3

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

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

2024.06.27

1231

7

热门下载

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

精品课程

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

共162课时 | 45.8万人学习

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

共28课时 | 3.6万人学习