如何在java中使用索引删除ArrayList()中的字符串元素序列?

如何在java中使用索引删除ArrayList()中的字符串元素序列?,java,string,arraylist,indexing,Java,String,Arraylist,Indexing,我想在我的代码中删除序列字符串元素中的4个索引。 My ArrayList包含多个字符串元素: {MyString,MyString1,MyString2,MyString3,MyString4,…,MyString10} 这是我的代码: String removedItem = "MyString"; for (int i = 0; i < myArrayList.size(); i++) { if (myArrayList.get(i).equals(removedIt

我想在我的代码中删除序列字符串元素中的4个索引。 My ArrayList包含多个字符串元素:

{MyString,MyString1,MyString2,MyString3,MyString4,…,MyString10}
这是我的代码:

String removedItem = "MyString";

for (int i = 0; i < myArrayList.size(); i++) {  
    if (myArrayList.get(i).equals(removedItem)) {
        myArrayList.remove(i);
        myArrayList.remove(i+1);
        myArrayList.remove(i+2);
        myArrayList.remove(i+3);
    }
}

System.out.println(myArrayList);
String removedItem=“MyString”;
对于(inti=0;i

我的代码似乎没有按顺序删除前4个索引。我做错了什么?我该如何修复它?任何帮助都将不胜感激

如果要删除指定的值和接下来的三个元素,可以使用:

for (int i = 0; i < myArrayList.size(); i++) {  
    if (myArrayList.get(i).equals(removedItem)) {
        myArrayList.remove(i);
        myArrayList.remove(i);
        myArrayList.remove(i);
        myArrayList.remove(i);
    }
}
for(inti=0;i

因为每次删除一个元素时,下一个元素都会向前移动。

如果要删除指定的值和下三个元素,可以使用此选项:

for (int i = 0; i < myArrayList.size(); i++) {  
    if (myArrayList.get(i).equals(removedItem)) {
        myArrayList.remove(i);
        myArrayList.remove(i);
        myArrayList.remove(i);
        myArrayList.remove(i);
    }
}
for(inti=0;i

因为每次删除一个元素时,下一个元素都会向前移动。

因为每次删除调用时,列表的大小都会减少一个。 要跟踪这一点,可以在remove调用时使用断点

例如,如果使用4个元素初始化ArrayList。 {MyString,MyString1,MyString2,MyString3}

i=0时

  • 调用
    myArrayList.remove后(0)
    MyString将被删除,
    myArrayList
    的大小将为3{MyString1、MyString2、MyString3}

  • 调用
    myArrayList.remove后(1)
    这将删除
    MyString2
    而不是
    MyString1
    {MyString1,MyString3}

  • myArrayList.remove(2)这将引发异常


您可以使用迭代器并使用
hasNext()
方法安全地检查,也可以使用何先生提供的代码回答并安全地检查
elemnt!=删除前为空。

因为每次删除调用时,列表的大小将减少一。
String removedItem = "MyString";

int remove = 0;
for (int i = 0; i < myArrayList.size(); i++) {  
    if (myArrayList.get(i).contains(removedItem)) {
        myArrayList.remove(i);
        i--;
        remove++;
        if(remove == 4) {
            System.out.println(myArrayList);
            return;
        }
    }

}
要跟踪这一点,可以在remove调用时使用断点

例如,如果使用4个元素初始化ArrayList。 {MyString,MyString1,MyString2,MyString3}

i=0时

  • 调用
    myArrayList.remove后(0)
    MyString将被删除,
    myArrayList
    的大小将为3{MyString1、MyString2、MyString3}

  • 调用
    myArrayList.remove后(1)
    这将删除
    MyString2
    而不是
    MyString1
    {MyString1,MyString3}

  • myArrayList.remove(2)这将引发异常

您可以使用迭代器并使用
hasNext()
方法安全地检查,也可以使用何先生提供的代码回答并安全地检查
elemnt!=删除前为空。

String removedItem=“MyString”;
String removedItem = "MyString";

int remove = 0;
for (int i = 0; i < myArrayList.size(); i++) {  
    if (myArrayList.get(i).contains(removedItem)) {
        myArrayList.remove(i);
        i--;
        remove++;
        if(remove == 4) {
            System.out.println(myArrayList);
            return;
        }
    }

}
int=0; 对于(inti=0;i
如果更改myArrayList值和removedItem值,它也会起作用。

String removedItem=“MyString”;
int=0;
对于(inti=0;i

如果您更改myArrayList值和removedItem值,它也会起作用。

如果您只需要删除4个元素,您可以使用以下命令:
int index=myArrayList.indexOf(removedItem);子列表(索引,索引+4).clear()
(如果列表不包含元素,则需要检查
索引
是否小于
0
)您当前的代码不工作,因为您删除了索引
i
处的元素,那么索引较大的所有元素都将下移
1
,以填补空白,因此,您只需调用
myArrayList.remove(i)
即可使其工作。另一种方法是更改顺序,首先删除
i+3
处的元素,然后删除
i+2
等。我知道您正在尝试从列表中删除包含“MyString”的字符串?为了避免误解,您希望从列表中删除前四个元素等于
removeditem
?如果超过四个,则第五个、第六个等将保留在列表中?您当前正在执行的操作是:如果某个项等于
removedItem
,则删除该项及其三个后续项。您甚至不检查这些继承者是否确实存在(如果列表中确实有这些索引)。您当前的代码不会删除这些项,因为它们不等于
removedItem
,即
“MyString”
,并且列表中的所有项都包含它,但由于附加了数字而不等于它。如果您只需删除4个元素,则可以使用此选项:
int index=myArrayList.indexOf(removedItem);子列表(索引,索引+4).clear()
(如果列表不包含元素,则需要检查
索引
是否小于
0
)当前代码不工作,