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

Java使用Scanner读取字段数不一致文件 将id3存入ArrayList的问题

问题原因分析
  • 核心逻辑错误:读取完第一个id3后直接调用inputFile.nextLine()跳过了当前行剩余的所有内容,导致该行后续的多个id3都没有被读取
  • 其他需要修正的问题:
    1. Scanner初始化错误:new Scanner ("myFile")传入的是字符串常量而非你创建的File对象,实际不会读取目标文件,需改为new Scanner(myFile)
    2. 变量名不匹配:你定义的id3集合变量名为id3List,代码中调用add方法时写的是id3.add
    3. 方法调用语法错误:hasNextInt是Scanner的类方法,需要加括号写成hasNextInt()
    4. 空值未兼容:第三行的price字段为空,直接调用nextFloat()会触发InputMismatchException
    5. 代码结构错误:while循环、内层try块均缺少闭合大括号
修复后代码
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class ReadFile {
    public static void main(String[] args){
        //变量定义
        int id1;
        int id2;
        String date;
        float price;
        ArrayList<Integer> id3List = new ArrayList<>();

        try {
            File myFile = new File("fileName.txt");
            Scanner inputFile = new Scanner(myFile).useDelimiter(",|\\r|\\n");

            try {
                while (inputFile.hasNext()) {
                    //读取前三个固定字段
                    id1 = inputFile.nextInt();
                    id2 = inputFile.nextInt();
                    date = inputFile.next();

                    //处理空price字段
                    String priceStr = inputFile.next().trim();
                    if(priceStr.isEmpty()){
                        price = 0f; //空值可按需求设置默认值
                    }else{
                        price = Float.parseFloat(priceStr);
                    }

                    //循环读取当前行所有剩余的id3值
                    while(inputFile.hasNextInt()){
                        id3List.add(inputFile.nextInt());
                    }

                    //消费当前行剩余内容,跳到下一行
                    if(inputFile.hasNextLine()){
                        inputFile.nextLine();
                    }
                }
            } catch(InputMismatchException | NumberFormatException e){
                System.out.println("Bad data in file.");
            }
            System.out.println(id3List);
            inputFile.close();

        } catch(FileNotFoundException e) {
            System.out.println("The file was not found.");
        }
    }
}
运行结果
[8271, 3715, 7362, 837, 3545, 7645, 460]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:06:04