我有一个奇怪的问题。我以为这会花我几分钟,但现在我已经挣扎了几个小时……这就是我得到的:
for (int i = 0; i < size; i++){ if (data.get(i).getCaption().contains("_Hardi")){ data.remove(i); } }
该data是ArrayList. 在ArrayList中我得到了一些字符串(共14个左右),和他们的9,它得名_Hardi。
data
ArrayList.
并使用上面的代码,我想删除它们。如果我replace data.remove(i);使用a,System.out.println那么它将打印出9次,这是好的,因为_Hardi在ArrayList中是9次。
replace data.remove(i);
System.out.println
但是,当我使用data.remove(i);它时,它不会删除所有9个,而只会删除几个。我做了一些测试,我也看到了:
data.remove(i);
当我将字符串重命名为:Hardi1 Hardi2 Hardi3 Hardi4 Hardi5 Hardi6
然后,它仅删除偶数(1、3、5等)。他一直在跳过1,但不知道为什么。
如何解决这个问题?或者也许是另一种删除它们的方法?
问题是您 要从0 迭代 到大小,并且在循环内要删除项目 。删除项目将减小列表的大小,当您尝试访问大于有效大小(被删除项目后的大小)的索引时,该列表将失败。
有两种方法可以做到这一点。
如果不想处理索引,请 使用迭代器 删除。
for (Iterator<Object> it = data.iterator(); it.hasNext();) { if (it.next().getCaption().contains("_Hardi")) { it.remove(); } }
否则, 从末尾删除。
for (int i = size-1; i >= 0; i--){ if (data.get(i).getCaption().contains("_Hardi")){ data.remove(i); } }