2011-05-24 55 views
1

我想從HashMap列表中刪除項目,並且在查看控制檯輸出時,它清楚地表明被比較的字符串是相等的,並且我使用.equals(String x)方法來比較,但是這個輸出持續顯示爲false,並且沒有任何東西從列表中移除。任何人都可以給我一個暗示,我在這裏做錯了什麼?Java中使用ArrayList的HashMaps的字符串相等性?我正在使用.equals()

public void removeWord(String wd) { 
     Log.println(Log.INFO, "Initial Size", "Initial size" + String.valueOf(allWords.size())); 
    for (int x = 0; x < allWords.size(); x++) { 
     Log.println(Log.INFO, "Current Word", allWords.get(x).get("Long") + " " + wd); 
     Log.println(Log.INFO, "Equality?", String.valueOf(allWords.get(x).get("Long").toUpperCase().equals(wd))); 
     if (allWords.get(x).get("Long").toUpperCase().equals(wd)) { 
      allWords.remove(x); 
      Log.println(Log.INFO, "Removed something", "Removed Something!!!!"); 
      clearAdapter(); 
     } 
    } 
     Log.println(Log.INFO, "Size of list", "Size of list" + String.valueOf(allWords.size())); 
} 
+0

你正在比較的單詞是否有一些空白,你沒有考慮?嘗試allWords.get(x).get(「Long」)。toUpperCase()。trim()。equals(wd) – 2011-05-25 00:01:03

+0

爲什麼在一個String中使用'toUpperCase()'而不在另一個?你能保證'wd'總是大寫嗎? – 2011-05-25 00:03:29

+0

我不禁注意到你的調試輸出不包含'toUpperCase();'但你的調試equals()和你的if。 – Andreas 2011-05-25 00:04:58

回答

2

你是比較字符串的映射到"Long"wd原始值的大寫值。除非wd以大寫形式傳入,否則您可能關閉。嘗試使用equalsIgnoreCase,並通過調用trim來確保兩個字符串沒有前導或尾隨空格。我希望這有助於!

1

當您解決問題時,可能是由字符串中的無用字符或值引起的 - 請嘗試比較日誌中的長度 - 您應該使用迭代器遍歷所有字和迭代器的remove方法,或者你可能會得到不一致的迭代。