2015-10-12 48 views
4

當我嘗試刪除單個項目時,此方法正常工作,但當我使用文件刪除多個項目時,我收到併發修改異常。如何迭代我的鏈表來搜索和刪除特定的字符串?

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

} 

回答

2

您可以使用一個迭代器安全remove元素,如:

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

一多,你並不需要獲得每個循環迭代子,所以我把它出的聲明。而且你必須提供一些邏輯,才能使你的消息ERROR: Not found for Removal:只有在沒有真正發現的情況下才會發生。我用布爾標誌作爲例子。

+1

非常優雅的解決方案。謝謝! – Remixt