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
相关产品推荐
相关产品推荐

