2015-10-12 2 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

Смежные вопросы