for循环中嵌套ArrayList元素长度为1 调用get(1)索引越界问题求解
嵌套ArrayList查找索引报错问题排查与修复
报错直接原因
错误提示索引1超出长度为1的容器边界说明:cityArray中存在长度为1的内层List<String>元素,代码未做校验直接调用get(1)访问下标为1的元素,触发数组越界异常。
同时原有代码还存在一个隐藏问题:Java中==用于字符串比较时判断的是对象内存地址,而非字符串内容,即使没有越界也大概率无法正确匹配目标值。
兼容异常场景的修正代码
public int findCity(String city) { city = "\"" + city + "\""; // 外层集合判空 if (cityArray == null || cityArray.isEmpty()) { return -1; } // 用普通for遍历可直接返回当前索引,无需额外调用indexOf,效率更高 for (int i = 0; i < cityArray.size(); i++) { List<String> innerList = cityArray.get(i); // 内层List判空+长度校验,避免越界 if (innerList == null || innerList.size() < 2) { // 此处可添加日志打印异常的内层List内容,方便排查脏数据来源 continue; } String currentCity = innerList.get(1); // 字符串比较使用equals方法 if (city.equals(currentCity)) { return i; } } return -1; }
CSV读取问题修复方案
你定位到的nextLine()读取csv时遇到空格生成新array的问题,可通过以下方式修复:
- 若使用Scanner读取文件,可调用
useDelimiter("\n")方法指定仅以换行符作为行分隔符,避免空格被识别为分隔符拆分出异常短数组 - 更推荐使用专业CSV解析工具处理文件,可自动处理分隔符、转义字符、特殊字符等场景,减少自行解析的异常概率
内容的提问来源于stack exchange,提问作者Mason
相关产品推荐
相关产品推荐

