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

Java读取不同长度逗号分隔文本文件时行剩余元素读取问题

问题根因

  • 全局仅实例化了一次limits列表,所有行的剩余元素都会累加进同一个列表,不会自动清空上一行数据
  • Scanner仅设置逗号为分隔符时,换行符会被视为普通字符,内层while (inputFile.hasNext())会直接读取到整个文件结束才停止,不会停在当前行末尾

修正后代码

ArrayList<Import> imports = new ArrayList<Import>();
File myfile = new File("file.txt");
try {
    Scanner inputFile = new Scanner(myfile);
    // 先逐行读取,避免跨行读取问题
    while (inputFile.hasNextLine()) {
        String line = inputFile.nextLine();
        // 跳过空行
        if (line.trim().isEmpty()) continue;
        // 拆分当前行的所有逗号分隔元素
        String[] items = line.split(",");
        // 读取前4个固定字段
        int ID = Integer.parseInt(items[0]);
        int spareID = Integer.parseInt(items[1]);
        String date = items[2];
        float fee = Float.parseFloat(items[3]);
        // 每次处理新行都创建新的limits列表
        ArrayList<String> limits = new ArrayList<String>();
        // 读取fee之后的剩余元素,仅读取当前行的内容
        for (int i = 4; i < items.length; i++) {
            limits.add(items[i]);
        }
        Import importObj = new Import(ID, spareID, fee, date, limits);
        imports.add(importObj);
    }
    inputFile.close();
} catch (FileNotFoundException e) {
    System.out.println("error: can not find file");
}

核心修改说明

  • 改为先读取整行再拆分的逻辑,从根源上避免跨行读取的问题
  • 将limits的实例化移到行循环内部,每行处理时都用全新的空列表存储数据,不会和其他行的数据混淆
  • 修复了原代码中SpareID变量名大小写不匹配、泛型声明Imports和实际类名Import不一致的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:39:05