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

使用split方法解析文件内容时遭遇NumberFormatException问题求助

NumberFormatException 错误原因及解决办法

错误根源

你遇到的java.lang.NumberFormatException: For input string: "Sug",本质是文本拆分后的数组元素错位,导致本该解析成数字的位置拿到了字符串"SUG",调用Integer.parseInt()时触发异常。

问题出在你使用的split分隔符:

String[] text = line.split(" | ");

这个写法等价于split(" "),会把单个空格当作分隔符。但如果你的文本文件中是多个连续空格分隔字段,这种拆分方式会生成包含空字符串的数组,比如原行是T001 SUG 12 3 8.30 HANOI(两个空格分隔),拆分后数组的元素顺序会乱,text[2]可能不是数字12,而是空字符串或者"SUG",后续转数字自然报错。

解决办法

1. 修正split的分隔符

用正则表达式\\s+匹配一个或多个连续空白字符(空格、制表符都能匹配),确保不管有多少个连续空格,都只会当成一个分隔符,拆分出干净的元素数组:

String[] text = line.split("\\s+");

2. 增加格式校验(可选但推荐)

在解析前先判断数组长度是否符合预期(应该是6个元素),避免因行格式错误导致的索引越界问题:

if (text.length != 6) {
    System.out.println("跳过格式无效的行:" + line);
    continue;
}

修改后的完整代码

public static SLL<train> readFile() {
    SLL<train> list = new SLL();
    try {
        FileReader fr = new FileReader("Train.dat");
        BufferedReader br = new BufferedReader(fr);
        String line;
        // 简化循环写法
        while ((line = br.readLine()) != null) {
            String[] text = line.split("\\s+");
            if (text.length != 6) {
                System.out.println("无效行:" + line);
                continue;
            }
            String tcode = text[0];
            String train_name = text[1];
            int seat = Integer.parseInt(text[2]);
            int booked = Integer.parseInt(text[3]);
            double depart_time = Double.parseDouble(text[4]);
            String depart_place = text[5];
            train t = new train(tcode, train_name, seat, booked, depart_time, depart_place);
            list.addLast(t);
        }
        br.close();
        fr.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:10:39