Java读取文件跳过行致二维数组赋值缺失的修复咨询
修复Java读取Entry结构文件到二维数组的问题
问题原因
你的代码只读取了奇数序号的Entry(1、3、5),核心问题是内层循环结束时已经读到了下一个Entry的行,但外层循环的while条件会再次调用readLine(),直接跳过了该Entry行的判断。
具体流程:
- 读完Entry1的5个
a后,内层循环最后一次readLine()会读到Entry 2:,此时内层循环因line.startsWith("Entry")退出。 - 执行
row++后,外层循环进入下一次迭代,调用line=reader.readLine()直接读到Entry2下的第一个b,跳过了Entry 2:的if判断,自然不会处理Entry2的内容。 - 后续
b的行不满足startsWith("Entry"),直接跳过,直到读到Entry 3:才会再次进入处理逻辑,以此类推。
修复方案
方案一:调整内层循环的读取逻辑
修改内层循环,仅当当前行不是Entry时才读取下一行,避免提前消耗下一个Entry行:
String line; int numrow = 5, numcol = 5; BufferedReader reader; String arr[][] = new String[numrow][numcol]; try { reader = new BufferedReader(new FileReader(pname)); int row = 0; int col = 0; // 增加row限制,避免数组越界 while ((line = reader.readLine()) != null && row < numrow) { if (line.startsWith("Entry")) { col = 0; line = reader.readLine(); while (line != null && !line.startsWith("Entry") && col < numcol) { arr[row][col] = line; col++; // 仅当前行不是Entry时,才读取下一行 if (!line.startsWith("Entry")) { line = reader.readLine(); } } row++; } } } catch (Exception e) { System.out.println("Error: " + e.getMessage()); } // 注意:原代码末尾多了一个多余的闭合大括号,需删除
方案二:重构读取逻辑,按Entry维度循环
直接按行维度(row)循环,每个row对应一个Entry,逻辑更清晰:
String line; int numrow = 5, numcol = 5; BufferedReader reader; String arr[][] = new String[numrow][numcol]; try { reader = new BufferedReader(new FileReader(pname)); int row = 0; while (row < numrow && (line = reader.readLine()) != null) { if (line.startsWith("Entry")) { int col = 0; // 读取当前Entry下的5行内容 while (col < numcol && (line = reader.readLine()) != null) { // 可选:若文件格式不规范,提前读到Entry则终止当前行的读取 if (line.startsWith("Entry")) { break; } arr[row][col] = line; col++; } row++; } } } catch (Exception e) { System.out.println("Error: " + e.getMessage()); }
额外注意点
- 原代码末尾有一个多余的
},会导致编译错误,必须删除。 - 增加
row < numrow的判断,避免数组越界(比如文件Entry数量超过5个时)。
修复后,二维数组会正确读取所有5个Entry的内容,打印结果与预期一致。
内容的提问来源于stack exchange,提问作者Twiko
相关产品推荐
相关产品推荐

