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

WhiteSpaceCounter Java代码统计空白字符结果异常,求问题排查

代码问题排查及修复方案

问题根因

  • 直接原因:countWords变量定义在while循环外层,会累计所有行的单词总数,你每次给whitespaceCount加的是全局累计单词数减1,相当于每处理一行就重复叠加之前所有行的空白计数,最终结果自然会异常偏高。
    举个简单的验证场景:文件有2行,第一行是a b c(3个词,2个间隔空白),第二行是d e(2个词,1个间隔空白),你原来的代码执行后:
    1. 处理第一行:countWords = 3,whitespaceCount += 2 → 累计值为2
    2. 处理第二行:countWords = 3+2=5,whitespaceCount += 4 → 累计值为6,正确结果应该是3,误差就是重复累加导致的。
  • 额外逻辑缺陷:你当前的实现只能统计单词之间的空白分隔次数,无法统计实际空白字符总数:split("\\s+")会把连续多个空白当成1次分隔,同时忽略行首行尾的空白,且readLine()会丢弃每行末尾的换行符(换行符也属于空白字符),如果你的需求是统计所有空白字符的个数,这个逻辑本身就不成立。
  • 资源泄漏风险:你打开的IO流没有主动关闭,长时间运行会占用系统资源。

修复方案

方案1:仅统计单词之间的空白分隔次数(适配你原来的需求逻辑)

import java.io.*;
public class WhiteSpaceCounter {
    public static void main(String[] args) throws IOException {
        File file = new File("excerpt.txt");
        // try-with-resources语法自动释放IO资源,无需手动关流
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) {
            String sentence;
            int whitespaceCount = 0;
            while((sentence = reader.readLine()) != null) {
                String[] wordlist = sentence.trim().split("\\s+");
                // 空行处理:trim后为空的行不统计
                if (wordlist.length > 0 && !wordlist[0].isEmpty()) {
                    whitespaceCount += wordlist.length - 1;
                }
            }
            System.out.println("单词间隔空白总数为:" + whitespaceCount);
        }
    }
}

方案2:统计所有空白字符的实际个数(空格、制表符、换行、回车等所有空白都统计)

直接逐字符判断更准确,避免split带来的逻辑误差:

import java.io.*;
public class WhiteSpaceCounter {
    public static void main(String[] args) throws IOException {
        File file = new File("excerpt.txt");
        int whitespaceCount = 0;
        try (FileInputStream fis = new FileInputStream(file)) {
            int charCode;
            while ((charCode = fis.read()) != -1) {
                if (Character.isWhitespace(charCode)) {
                    whitespaceCount++;
                }
            }
            System.out.println("文件内空白字符总数为:" + whitespaceCount);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:05