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

ArrayIndexOutOfBoundsException异常:访问split分割后数组索引2报错如何解决

问题根因与解决方案

核心报错原因

  1. 索引用法错误:Java数组为0起始索引,若要获取分割后数组的第二个元素,应使用下标1,直接使用2作为下标时,只要数组长度小于3就会抛出越界异常。
  2. 正则匹配逻辑有疏漏:gh2[i].matches("[0-9]+")要求整个字符串完全由数字组成,若gh2的元素存在前后空格、换行等不可见字符,会直接匹配失败,导致listawynikow实际没有符合要求的元素。你修改取反逻辑后可以正常运行,就是因为取反后匹配了所有非全数字的元素,列表不为空所以split后数组长度足够,但不符合你的数据筛选需求。
  3. 混淆了ArrayList的初始容量和实际元素数量:初始化时传入的gh2.length只是设定列表的初始存储空间大小,不是实际存储的元素个数,实际元素数需要调用listawynikow.size()获取,大概率你的列表实际没有存入任何元素,才会导致后续拼接的字符串没有分号分隔符,split后数组长度仅为1。

修复方案

  • 优化正则匹配逻辑,先去除字符串前后空白再做匹配,避免不可见字符影响匹配结果
  • 删掉多余的StringBuilder拼接+split逻辑,直接将ArrayList转为数组即可,既减少冗余操作也能避免拆分出错
  • 调用元素时注意使用0起始索引,第二个元素的下标为1

优化后完整代码

ArrayList<String> listawynikow = new ArrayList<>(gh2.length);
for (int i = 0; i < gh2.length; i++) {
  // 先去除前后空白再匹配数字
  if (gh2[i].trim().matches("[0-9]+")) {
    listawynikow.add(gh2[i].trim());
  }
}
// 直接转数组,不需要拼接再拆分
String[] WYNIKI = listawynikow.toArray(new String[0]);

如果仅需要获取列表的第二个元素,连转数组的步骤都可以省略,直接调用listawynikow.get(1)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 08:54:05