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

Java读取文本文件为字符串分配属性时数组下标越界如何解决

问题根源

你当前的代码存在两个核心错误:

  • BufferedReader的readLine()方法每次调用都会读取一行文本,你在while判断条件里先调用了一次readLine(),这一行内容直接被丢弃没有使用,循环内再次调用readLine()相当于跳行读取,且每次只能拿到单独一行内容
  • 你调用split("\\r?\\n")是对单独一行文本按换行符分割,分割后数组永远只有1个元素,访问索引1、2自然会触发数组越界报错

解决方案

你的文本格式是每3行对应一个TutorialWebsite对象的三个属性,所以每次循环连续读取3行即可,不需要做分割操作,同时要注意读取行可能为null的边界判断,基础正确代码如下:

try {
    BufferedReader in = new BufferedReader(new FileReader("Tutorials.txt"));
    String lang;
    // 每次先读取编程语言行,为null说明文件读完了,结束循环
    while ((lang = in.readLine()) != null) {
        TutorialWebsite tw = new TutorialWebsite();
        // 连续读3行分别赋值三个属性
        tw.setProgramLanguage(lang);
        tw.setWebDescription(in.readLine());
        tw.setWebURL(in.readLine());
        System.out.println(tw);
    }
    in.close();
} catch (IOException e) {
    e.printStackTrace();
}

如果需要更严谨的边界校验,避免文件行数不是3的倍数导致空值赋值,可以增加非空判断逻辑:

while ((lang = in.readLine()) != null) {
    String desc = in.readLine();
    String url = in.readLine();
    if (desc == null || url == null) {
        break;
    }
    TutorialWebsite tw = new TutorialWebsite();
    tw.setProgramLanguage(lang);
    tw.setWebDescription(desc);
    tw.setWebURL(url);
    System.out.println(tw);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:15:00