Android 将字符串与数组进行比较并删除数组索引值

if(responseArr.size()!=0) {

    for(int i=0;i<responseArr.size();i++) {

        if(responseArr.get(i).equals("busy")) {

            stylistId.remove(i);

        }

    }

}

如果数组中的任何值包含字符串busy,我想从该位置的stylistId数组中删除该值。在上面的代码中,responseArr数组和stylistId数组的大小相同。


当我尝试从stylistId 中删除值时,循环第一次执行时它工作正常。当循环第二次执行时,我得到indexOutOfBound异常。


PIPIONE
浏览 297回答 2
2回答

慕桂英546537

发生这种情况是因为当您删除一个元素时,列表中某些元素的索引会发生变化。例如,如果您的列表有五个元素 (0, 1, 2, 3, 4) 并且您删除了元素 2,那么元素 3 和 4 将被重新编号,以便之后您拥有 (0, 1, 2, 3) 。这个问题有很多可能的解决方案,但一种方法是简单地responseArr向后遍历。&nbsp; &nbsp; &nbsp; &nbsp; for(int i= responseArr.size() - 1;i >= 0; i--){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(responseArr.get(i).equals("busy")){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stylistId.remove(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }这样,您只会更改已检查过的元素的索引。

慕妹3242003

因为有两个版本的remove方法。删除索引处的元素删除给定元素您需要调用返回元素的第二个方法。所以,你可以使用 Like,for (int i = 0; i < responseArr.size(); i++) {&nbsp; &nbsp; &nbsp; if (responseArr.get(i).equals("busy")) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int id = stylistId.remove(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//use your type instead of int.&nbsp; &nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java