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

Java程序问题:存单词到ArrayList后查找含'd'单词触发索引越界异常

解决ArrayList索引越界&查找含'd'单词的问题

嘿,我一眼就看出问题出在哪了——你遇到的java.lang.IndexOutOfBoundsException: Index: 170, Size: 170,本质是把ArrayList的索引范围搞混了。ArrayList的索引是从0开始计数的,当集合里有170个元素时,最大的有效索引是169(也就是size()-1)。如果你的循环条件写的是i <= wordList.size(),那当i=170的时候,去调用wordList.get(i)自然就会越界报错。

结合老师给的indexOf方法建议,咱们把代码修正过来,同时完成查找含'd'单词的需求:

方案1:修正普通for循环的边界

假设你已经完成了读取文件存入ArrayList<String> wordList的部分,那遍历查找的代码可以改成这样:

// 遍历ArrayList查找含'd'的单词
for (int i = 0; i < wordList.size(); i++) { // 关键:这里是i < size(),不是<=
    String word = wordList.get(i);
    // 用indexOf判断是否包含'd':返回值不等于-1就表示存在该字符
    if (word.indexOf('d') != -1) {
        System.out.println(word);
    }
}

方案2:用增强for循环(更简洁,彻底避免索引问题)

如果你不想再操心索引的事儿,推荐用Java的增强for循环,写法更直观,还不会踩索引的坑:

for (String word : wordList) {
    // 用indexOf("d")也可以,效果和indexOf('d')完全一致
    if (word.indexOf("d") > -1) {
        System.out.println(word);
    }
}

补充小技巧

  • String.indexOf(char c)方法会返回字符c在字符串中第一次出现的索引位置,找不到就返回-1,完美匹配老师给的判断逻辑。
  • 如果你需要区分大小写(比如只找小写'd',不匹配大写'D'),上面的写法刚好适用;如果要忽略大小写,可以先把单词转成统一大小写再判断:word.toLowerCase().indexOf('d') != -1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:26:01