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
相关产品推荐
相关产品推荐

