我在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)
。要修复代码,您需要考虑如何处理IndexOutOfBoundsException
和k
。
从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--;
}
}
}