将文本文件转为列表并通过索引访问元素报错求助
列表索引越界问题修复及代码优化
问题根源
你的代码抛出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
相关产品推荐
相关产品推荐

