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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:05:14