2011-05-24 51 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方法,或者你可能会得到不一致的迭代。