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

数组对象数量过大引发ArrayIndexOutOfBoundsException问题求助

解决ArrayIndexOutOfBoundsException:分割后数组长度不足导致的越界问题

兄弟,看了你的问题和代码,我一眼就瞅出问题出在哪了!你遇到的ArrayIndexOutOfBoundsException: length=5; index=5意思特别明确:你尝试访问一个长度为5的数组的第6个元素(数组索引从0开始算),这不炸才怪!

问题根源分析

小数据量时正常,800条数据就崩溃,核心原因是:某条data[i]字符串用[*]分割后,得到的数组只有5个元素,但你直接去取splitArray[5]。小数据量时刚好所有条目都符合“用分割后有6个字段”的格式,所以没出问题;但数据量变大后,混进了一两条格式不符合的条目(比如少了一个分隔的字段),导致split后的数组长度不够6,直接访问索引5就触发了越界异常。

解决方案

1. 先加防御性检查,避免崩溃

在处理split后的数组前,先检查它的长度是否等于6,不符合的条目直接跳过(或者记录日志方便排查),修改你的deliverResult方法里的循环部分:

for (int i=0; i<data.length; i++) {
    String imagePath = "http://image.tmdb.org/t/p/w185/" ;
    int imageId;
    String title;
    String overview;
    String rating;
    String releaseDate;
    String[] splitArray;
    try {
        splitArray = data[i].split("[*]");
        // 关键:先校验分割后的数组长度是否符合要求
        if (splitArray.length != 6) {
            Log.e("MainActivity", "数据格式错误,索引" + i + "的条目分割后长度为" + splitArray.length + ",内容:" + data[i]);
            continue; // 跳过这条错误数据,继续处理下一条
        }
    } catch (PatternSyntaxException e) {
        Log.e("MainActivity", "分割正则表达式错误", e);
        continue;
    }
    imagePath+=splitArray[2];
    imageId = Integer.valueOf(splitArray[0]);
    title = splitArray[1];
    rating = splitArray[3];
    overview = splitArray[4];
    releaseDate = splitArray[5];
    posters[i] = new Poster( imageId, imagePath, title, overview, rating, releaseDate);
}

2. 从源头修复数据格式问题

上面的代码能避免崩溃,但你得去排查生成data数组的源头(比如网络请求返回的数据、本地存储的数据源),看看是不是某些条目少了*分隔符,或者字段为空导致分割后长度不足。从源头修复数据格式,才能彻底解决问题。

3. 额外建议:用更安全的方式解析结构化数据

尽量别用split来解析这种多字段的结构化数据,推荐用JSON格式传递数据,然后用Gson/Jackson这类库来解析,不仅更安全,后续维护也更方便,不会因为分隔符的问题踩坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:50:15