如何遍历链表以搜索和删除特定字符串?

时间:2015-10-12 03:53:47

标签: java sorting linked-list

当我尝试删除单个项目时,此方法正常工作,但当我使用文件删除多个项目时,我得到并发修改异常。

    static void delete(String dString) {
    LinkedList<String> AddressBook2 = AddressBook;
    for(String s : AddressBook2){
        String subString = dString.toUpperCase().substring(7);
        if(s.toUpperCase().contains(subString)){
            AddressBook.remove(s);
            System.out.println("Removal Successful: "+ s);

        }

    }

    System.out.println("ERROR: Not found for Removal: "+dString.substring(7));
    System.out.println("----------------------------");

}

1 个答案:

答案 0 :(得分:1)

您可以使用迭代器来安全删除元素,例如:

String subString = dString.toUpperCase().substring(7);

boolean resultFound = false;

for (Iterator<String> iterator = addressBook2.iterator(); iterator.hasNext();) {
    String s = iterator.next();
    if(s.toUpperCase().contains(subString)) { 
        iterator.remove(); 
        System.out.println("Removal Successful: "+ s); 
        resultFound = true;
    } 
}

if (!resultFound) {
    System.out.println("ERROR: Not found for Removal: "+dString.substring(7));
}
System.out.println("----------------------------");

另外,您不需要在每次循环迭代时获取子字符串,因此我将其移出for语句。而且你必须提供一些逻辑,只有在没有真正找到的情况下才能使你的消息ERROR: Not found for Removal:发生。我用布尔标志作为例子。