我在for循环中循环检查元素的子字符串:
示例:标题-> [经理,市场经理,销售,销售和市场经理]
预期成果:[销售和市场经理]
由于manager是Marketing Manager的子字符串,因此我要删除元素管理器,然后Sales是Sales and Marketing Manager的子字符串,因此我要从数组中删除销售元素,而Marketing Manager是Sales and Marketingting的子字符串,因此要删除Marketing Manager在清单中,最终输出将为[销售和市场经理]

static String removeSecWords(List<String> titles) {


         for (int j = 0; j < titles.size(); j++) {
                for (int k = 0; k < titles.size(); k++) {
                    if (j == k)
                        continue;
                    if (titles.get(j).contains(titles.get(k))) {
                        titles.remove(k);

                    }
                }
            }
    return (titles.toString());
}


我收到错误IndexOutOfBounds异常,可以告诉我该怎么做。

最佳答案

如果从titles中删除​​,则j可能等于titles.size();,因此下次尝试时会得到titles.get(j)。要修复代码,您需要考虑如何处理IndexOutOfBoundsExceptionk

j删除时,您不想增加titles,因为否则将跳过一个元素。我已经写了k作为快速而懒惰的修复程序,但是通常我不建议在传统的k--;循环中更改索引。

另外,如果for在删除位置之后,则也需要更改j索引,因此它仍然引用相同的元素。试试这个版本:

for (int j = 0; j < titles.size(); j++) {
    for (int k = 0; k < titles.size(); k++) {
        if (j != k && titles.get(j).contains(titles.get(k))) {
            titles.remove(k);
            if (j > k)
                j--;
            k--;
        }
    }
}

09-12 16:46