【问题标题】:How do I iterate over my linked list to search for and delete specific strings?如何遍历我的链表以搜索和删除特定字符串?
【发布时间】:2016-01-09 10:53:25
【问题描述】:

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

    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("----------------------------");

}

【问题讨论】:

    标签: java sorting linked-list


    【解决方案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: 只有在没有真正找到时才会发生。我以布尔标志为例。

    【讨论】:

    • 非常优雅的解决方案。谢谢!
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2019-05-27
    • 2019-12-01
    相关资源
    最近更新 更多