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

如何处理java.lang.ArrayIndexOutOfBoundsException: 1异常?

这种数组越界的问题真的很磨人,尤其是明明已经加了判断却还是踩坑!我来帮你捋捋可能的问题和解决办法。

首先,你提到错误出现在仅有一条注释的行,而且是分割字符串时索引到0却要访问1——这说明你的代码在处理这类行时,分割后的数组长度其实只有1,但你还是尝试访问索引1的元素。哪怕加了if判断,可能你的判断逻辑没覆盖到所有场景,或者分割方式本身就有问题。

我先梳理几个常见的坑:

1. 分割逻辑用错了分隔符

很多人会误以为注释和前面的内容是用空格分隔的,所以用split(" ")来拆分代码和注释,但如果单行注释是//注释内容(前面没有空格),或者行首有空格比如 //注释,这种分割方式就会出问题:

  • //注释内容用split(" ")分割后,数组只有1个元素(整个字符串),这时候访问parts[1]直接报错。
  • 就算你用//作为分隔符,Java里的split方法参数是正则表达式,//需要转义成\\\\//(因为Java字符串里要表示一个\得写两个,正则里匹配/也要用\转义,所以最终是四个反斜杠加两个斜杠)。如果没转义,分割逻辑根本不生效,自然拿不到第二部分。

2. 判断单行注释的逻辑不全面

你可能只判断了line.startsWith("//"),但忽略了行首有空格的单行注释(比如 // 这是注释),这种情况下startsWith("//")返回false,你的代码可能会把它当成普通代码行处理,然后去分割访问parts[1],但如果分割后的数组长度不够,就会报错。

修复方案

给你一套更稳妥的处理逻辑:

第一步:用正确的方式分割代码和注释

用split("\\\\//", 2)来分割,第二个参数2表示最多分成两部分,避免把注释里的//也拆分(比如注释里写了// 这里有个//)。这样不管有没有代码部分,分割后的数组:

  • 如果有注释,长度至少是2,parts[0]是//前面的内容(可能是空或带空格),parts[1]是注释内容。
  • 如果没有注释,长度是1,parts[0]就是整行代码。

第二步:完善判断逻辑,先检查数组长度再访问元素

String line = ...; // 从文件读取的行
// 分割代码和注释,最多分2部分
String[] parts = line.split("\\\\//", 2);
String codeContent = parts[0].trim();
String commentContent = "";

// 先判断是否有注释部分
if (parts.length >= 2) {
    commentContent = parts[1].trim();
}

// 处理缩进逻辑
if (codeContent.isEmpty()) {
    // 这是单行注释(不管前面有没有空格)
    System.out.println(currentIndent + "// " + commentContent);
} else {
    // 有代码的情况,处理代码缩进后加上注释
    System.out.println(currentIndent + codeContent + " // " + commentContent);
}

额外要测试的边界情况

  • 空行:直接跳过或者保持原样
  • 代码和注释在同一行:比如int num = 0; // 初始化变量
  • 注释里包含//:比如// 注释里的//不会被拆分
  • 行首有多个空格的单行注释:比如 // 带前置空格的注释

这样调整后,应该就能避免数组越界的问题了。

内容的提问来源于stack exchange,提问作者J.Rogers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:43:12