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

Java统计文件各段落单词数及现有代码修改求助

实现方案

你可以通过新增段落级单词计数器和存储集合,在原有逻辑基础上稍作修改即可实现需求,同时优化了原有代码的空行判断、转义符错误问题,修改后完整代码如下:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class FileStatistic {
    public static void main(String[] args) throws Exception {
        String path = "C:/CT_AQA - Copy/src/main/resources/file.txt";
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));

        String line = " ";
        int countWord = 0;
        int sentenceCount = 0;
        int characterCount = 0;
        int paragraphCount = 1;
        int countNotLetter = 0;
        int letterCount = 0;
        // 存储每个段落的单词数
        List<Integer> paragraphWordCounts = new ArrayList<>();
        // 累计当前正在读取段落的单词数
        int currentParaWordCount = 0;

        while ((line = br.readLine()) != null) {
            // 修正空行判断:过滤全是空白字符的行作为段落分隔
            if (line.trim().isEmpty()) {
                // 校验逻辑:跳过连续空行,避免统计无内容的空段落
                if (currentParaWordCount > 0) {
                    paragraphWordCounts.add(currentParaWordCount);
                    currentParaWordCount = 0;
                    paragraphCount++;
                }
            } else {
                characterCount += line.length();
                // 修正原代码转义符错误
                String[] wordList = line.split("\\s+");
                int lineWordNum = wordList.length;
                countWord += lineWordNum;
                // 累计当前段落单词数
                currentParaWordCount += lineWordNum;

                String[] sentenceList = line.split("[!?.:]+");
                sentenceCount += sentenceList.length;
                String[] letterList = line.split("[^a-zA-Z]+");
                countNotLetter += letterList.length;
            }
            letterCount = characterCount - countNotLetter;
        }
        // 循环结束后补充存入最后一个段落的单词数,避免遗漏无空行结尾的段落
        if (currentParaWordCount > 0) {
            paragraphWordCounts.add(currentParaWordCount);
        }
        br.close();

        // 原有统计结果输出
        System.out.println("总单词数:" + countWord);
        System.out.println("总句子数:" + sentenceCount);
        System.out.println("总段落数:" + paragraphCount);
        System.out.println("总字母数:" + letterCount);
        // 输出每个段落的单词数
        for (int i = 0; i < paragraphWordCounts.size(); i++) {
            System.out.printf("第%d段单词数:%d%n", i+1, paragraphWordCounts.get(i));
        }
    }
}

核心逻辑说明

  • 用List<Integer>类型的集合存储各段落单词数,遍历即可输出所有段落的统计结果
  • 优化空行判断逻辑,避免全空格行被误识别为内容行、连续空行被误统计为多个段落
  • 修正原代码中split("\\s+")的转义错误,保证单词分割逻辑正常生效
  • 循环结束后额外补充最后一段的单词数统计,避免遗漏最后一个没有空行结尾的段落

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:27:04