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

时间:2018-09-12 06:32:56

标签: java 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 异常。

2 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为删除元素时列表中某些元素的索引发生了变化。例如,如果您的列表包含五个元素(0、1、2、3、4),并且删除了元素2,则元素3和4将被重新编号,以便之后具有(0、1、2、3)。 / p>

有很多解决此问题的方法,但是一种方法就是简单地向后遍历responseArr

        for(int i= responseArr.size() - 1;i >= 0; i--){
            if(responseArr.get(i).equals("busy")){
                stylistId.remove(i);
            }
        }

这样,您将只更改已检查的元素的索引。

答案 1 :(得分:-1)

因为remove方法有两个版本。

  1. 删除索引处的元素
  2. 删除给定元素

您需要调用第二个返回元素的方法。因此,您可以使用“赞”

for (int i = 0; i < responseArr.size(); i++) {
      if (responseArr.get(i).equals("busy")) {
            int id = stylistId.remove(i);             //use your type instead of int.
      }
}