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

Java读取文本文件求和异常:Scanner分隔符问题排查

解决Java读取文本文件数值求和的分隔符与循环问题

你的问题核心在于分隔符设置不全面,以及循环逻辑和Scanner的分隔符机制不匹配,导致程序只处理了前几个数值,还陷入了无限循环。咱们一步步拆解问题,再给出修复方案:

问题根源分析

  1. 分隔符覆盖了行分隔符:你设置了scan.useDelimiter(", "),这会让Scanner只把, 当作分隔符,而文件里的换行、单纯的空格(比如1.8和1.3之间的空格)都不被识别成分隔符。这导致hasNextLine()永远返回true——因为Scanner根本没把换行当作行结束的标志,它还在等待下一个, 分隔符。
  2. 非数值token阻塞了流程:当Scanner遇到1.8 1.3这个无法被, 拆分的内容时,hasNextDouble()会返回false,循环就卡在while (scan.hasNextLine())里,既处理不了后面的内容,也无法退出循环。

修复方案

我们需要调整两个关键部分:

  • 用正则表达式分隔符,匹配所有可能的分隔符号(, 、空格、换行)
  • 调整循环逻辑,遍历所有拆分后的token,而不是按行判断

修改后的完整代码

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main3 {
    public static void main(String[] args) {
        File main3File = new File("Main3.txt");
        double sum = 0;
        try {
            Scanner scan = new Scanner(main3File);
            // 匹配", " 或者 任意数量的空白字符(包括空格、换行)
            scan.useDelimiter(", |\\s+");
            
            // 遍历所有拆分后的token,不管在第几行
            while (scan.hasNext()) {
                if (scan.hasNextDouble()) {
                    sum += scan.nextDouble();
                    // 如果需要调试,可以保留这行输出中间结果
                    // System.out.println("当前累加和:" + sum);
                } else {
                    // 跳过非数值的token(比如"aa")
                    scan.next();
                }
            }
            scan.close(); // 别忘了关闭资源
        } catch (FileNotFoundException ex) {
            System.out.println("文件未找到错误");
        }
        System.out.println("Suma: " + sum);
    }
}

关键修改点解释

  1. 分隔符正则表达式:", |\\s+"表示匹配两种情况:
    • , :逗号加空格(对应你文件里大部分的分隔)
    • \\s+:一个或多个空白字符(包括普通空格、换行符,解决跨行和无逗号的空格分隔问题)
  2. 循环逻辑改为while (scan.hasNext()):这个方法会遍历所有被分隔符拆分后的token,不管它们在第几行,完美适配我们的分隔符设置。
  3. 跳过非数值token:当遇到aa这种非double类型的内容时,用scan.next()跳过它,避免流程阻塞。

测试结果

针对你的txt文件内容,所有double数值的总和是49.3,程序运行后会正确输出这个结果,同时不会再出现无限循环的问题。

内容的提问来源于stack exchange,提问作者Kacper Zięba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:37:31