2014-06-24 3 views
0

나는 다음과 같은 방법이 사용하는 동안에도 ConcurrentModifcationException 얻기 : 라인에반복하는이 반복자

//Cleans any stop words at the beginning of the sentence, returns the remaining 
//sentence. 
public static String cleanBeginning(String sentence, boolean skipEmpty) 
{ 
    List<String> words = Common.getWords(sentence, skipEmpty); 
    int i = 0; 
    Iterator<String> iterator = words.iterator(); 
    while (iterator.hasNext()) 
    { 
     String word = iterator.next(); 
     if (stopWords.contains(word.toLowerCase())) 
     { 
      words.remove(i); 
      continue; 
     } 
     break; 
    } 

    StringBuilder sb = new StringBuilder(); 
    for (String cleanedWord : words) 
    { 
     sb.append(cleanedWord).append(" "); 
    } 

    return sb.toString().trim(); 
} 

: String word = iterator.next();

가 나는 java.util.ConcurrentModificationException를 얻을 수 있습니다. 왜 그런가요? 나는 iterator.next()가 arraylist를 돌아 다니는 안전한 방법이라고 생각 했습니까? 내가 뭐 잘못하고 있니?

+4

그냥 반복하는이 반복자를 사용하여 충분하지 않습니다. 그것을 통해 변경해야합니다. – awksp

답변

4

이터레이터를 사용하여 컬렉션에서 제거해야하며 그렇게하지 않습니다.

변경 :

words.remove(i); 

에 :

iterator.remove(); 
+0

감사합니다! 나는 항상 이것을 잊는다. –

+0

@ClickUpvote : 천만에요. –