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

明明数组未越界却抛出ArrayIndexOutOfBoundsException?求解答

问题分析与解决方案

首先咱们直接戳中核心:你测试的是格式完全合规的行,但程序运行时肯定碰到了格式异常的行(比如空行、只有1个字段的行),导致split后的数组长度不足2,访问str[1]时触发了数组越界异常。

为什么测试时没问题?

你用来测试的行是符合CSV格式的,分割后能得到至少2个元素,所以str[1]能正常访问。但实际的CSV文件里大概率存在这些情况:

  • 空行(或者只有空格的无效行)
  • 没有逗号的行(整个行就是一个独立字段)
  • 逗号数量少于1个的行(分割后数组长度小于2)

当程序处理这些行时,split(",",7)得到的数组长度不够,这时候硬去访问str[1]就会直接抛出ArrayIndexOutOfBoundsException。

你的代码还有冗余逻辑

另外,你代码里的两个if(line.contains("PATRON"))和if(!line.contains("PATRON"))是完全互斥的,合并成if-else能减少冗余判断,让代码更清晰。

修复后的代码示例

给你调整后的代码,核心是先检查分割后的数组长度,再访问索引,同时处理空行和格式异常的行,还额外规避了后续可能触发的其他索引越界:

while((line = br.readLine()) != null) {
    // 先处理空行或全空白的行,避免后续分割出空数组
    if (line.trim().isEmpty()) {
        pw.println(line); // 也可以选择跳过:continue;
        continue;
    }
    
    if(line.contains("PATRON")) {
        pw.println(line);
    } else {
        String[] str = line.split(",", 7);
        // 关键:先确保数组长度足够访问str[1]
        if (str.length >= 2) {
            if(str[1].equals(ID)) {
                // 额外检查:拼接时用到了str[2]和str[5],必须保证数组长度足够
                if (str.length >= 6) {
                    pw.println(str[0] + "," + ID + "," + str[2] + "," + "false" + "," + "0" + "," + str[5] + "," + "0");
                } else {
                    // 处理字段不足的行,比如写入原行或记录错误日志
                    pw.println(line);
                    System.err.println("Line has insufficient fields for editing: " + line);
                }
            } else {
                pw.println(line);
            }
        } else {
            // 格式错误的行,直接写入原行或做其他处理
            pw.println(line);
            System.err.println("Invalid line format, can't access index 1: " + line);
        }
    }
}

额外小提醒

看你的调用代码里连续两次scan.nextLine():

case "7": 
    System.out.println("Enter material ID: "); 
    String matsid = scan.nextLine(); 
    mats.returnmat(matsid); 
    scan.nextLine(); 
    break;

这可能会导致用户输入后需要多按一次回车,大概率是之前用了scan.nextInt()这类方法没处理换行符导致的,建议同步检查下输入逻辑,但这不是当前数组越界的直接原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:23:36