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

将文本文件转为列表并通过索引访问元素报错求助

列表索引越界问题修复及代码优化

问题根源

你的代码抛出IndexOutOfBoundsException: index 3 , Size 1,核心原因:

  • 内层for循环完全多余,且第一次添加元素后(列表仅1个元素)就直接访问索引3,此时列表最大有效索引为0,必然触发越界。
  • 使用add(d, scanText.next())指定位置插入元素,但当前列表长度不足以支撑目标索引,且你的场景不需要指定位置插入。

修正后的代码

import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TextToListDemo {
    public static void main(String[] args) {
        List<String> textToList = new ArrayList<>();
        
        try (FileReader myTEXT = new FileReader("myTEXT.txt");
             Scanner scanText = new Scanner(myTEXT)) {
             
            scanText.useDelimiter(",\\s*");
            
            // 遍历所有分隔后的元素,追加到列表
            while (scanText.hasNext()) {
                textToList.add(scanText.next());
            }
            
            // 验证列表长度后访问目标索引
            if (textToList.size() > 3) {
                System.out.println(textToList.get(3));
            } else {
                System.out.println("列表元素不足4个,无法访问索引3");
            }
            
            // 可选:打印完整列表确认结果
            System.out.println("完整列表:" + textToList);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键修改说明

  • 移除内层for循环:Scanner的while(scanText.hasNext())已能逐个读取所有分隔后的元素,无需额外循环控制次数。
  • 改用无参add()方法:直接将元素追加到列表末尾,避免指定索引插入带来的越界风险。
  • 增加索引访问前的判断:先检查列表长度是否大于3,确保索引有效后再访问,避免运行时异常。
  • 使用try-with-resources语法:自动关闭文件流和Scanner,避免资源泄漏。

运行结果

执行后输出:

COMMING
完整列表:[PETTY MIND, 2023, IS, COMMING]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:12:19