在for循环中删除 - JAVA

use*_*166 -4 java loops for-loop list arraylist

所以假设我有一个迭代字符串列表的for循环.字符串列表就像

List<String> myString = {NEW ROW, cs, 1, 2, 3, NEW ROW, tp, 3, 4, 5}
Run Code Online (Sandbox Code Playgroud)

我希望for循环遍历列表并在每次NEW ROW出现在列表中之后删除NEW ROW和下一个x元素.

我怎样才能做到这一点?

我的尝试:

 for (int index = 0; index < myList.size(); index++) {

        if (myList.get(index).equals("NEW ROW")) {
            for (int j = index; j < index + x; j++) {
                myList.remove(j);
            }
            index = index + x;

        } 
    }
Run Code Online (Sandbox Code Playgroud)

我的尝试不起作用.

das*_*ght 6

您可以使用list iterator来简化代码,并避免完全使用索引数学:

for (Iterator<String> iterator = myString .iterator(); iterator.hasNext();) {
    String string = iterator.next();
    if (string.equals("NEW ROW")) {
        // Call iterator.remove() x times,
        // or until the list runs out of elements
        for (int i = 0 ; iterator.hasNext() && i != x ; i++) {
            iterator.remove();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于LinkedList实施.如果你使用ArrayList实现,你最好在一个循环中完成所有操作:

int read = 0, write = 0;
while (read < myList.size()) {
    String s = myList.get(read);
    if (s.equals("NEW ROW")) {
        read += x;
    } else {
        myList.set(write++, s);
        read++;
    }
}
// Trim the end of the list
for (int last = myList.size()-1 ; last >= write ; last--) {
    myList.remove(last);
}
Run Code Online (Sandbox Code Playgroud)

此实现将您要保留的项目移动到列表的开头,然后修剪结束元素.