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

Java读取文件同一行字符串与整数时报NumberFormatException如何解决

问题原因

你碰到的NumberFormatException不是setName那行导致的,根本原因是你把拆分后的所有元素(包括第一个姓名)都传入了Integer.parseInt()做数字转换,姓名是纯字符串自然会抛出格式错误。同时你原代码的循环结构逻辑混乱:一行数据对应1个Bet对象,你却嵌套了多层循环,还在遍历拆分后元素的逻辑里递增j,会导致数组下标越界和数据存储错误。

修复方案

拆分每行得到字符串数组后,单独取下标为0的元素作为姓名赋值,从下标1开始遍历剩余元素做数字转换存入投注vector即可,调整后的代码如下:

public void betsReads() throws IllegalArgumentException, IOException {
    File betsFile = new File ("C:\\Temp\\bets.txt");
    // 用try-with-resources自动关闭流,避免资源泄露
    try (FileReader fr = new FileReader(betsFile);
         BufferedReader br = new BufferedReader(fr)) {
        
        int j = 0;
        String row;
        // 一行对应一个Bet对象,在读取行的循环里直接处理
        while((row = br.readLine()) != null && j < size) {
            totalBets[j] = new Bet();
            String[] strings = row.split(" ");
            // 第一个元素是姓名,单独赋值
            totalBets[j].setName(strings[0]);
            // 从第二个元素开始遍历为投注数字
            for(int i = 1; i < strings.length; i++) {
                Integer foo = Integer.parseInt(strings[i]);
                totalBets[j].vectorBers[i-1] = foo;
            }
            j++;
        }
    }
    System.out.println("BETS FILE READ SUCCESSFULLY");
}
注意事项
  • 要保证totalBets数组的长度大于等于文件的行数,vectorBers的长度大于等于每行投注数字的个数,避免下标越界
  • 当前实现仅适用于姓名无空格、所有字段用单个空格分隔的场景,如果行首姓名可能包含空格,需要单独调整拆分规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:15:04