Java Hashset返回false而不是true

时间:2016-03-30 21:11:05

标签: java string arraylist hashset

这段代码不断返回false,我无法弄清楚原因。

List<String> angry = new ArrayList<String>();
while ((anger = angerSt.readLine()) != null) {
    angry.add(anger);
}
angerSt.close();
String[] angrywords = angry.toArray(new String[0]);
String word = "mad"
Set<String> angryWordSet = new HashSet<String>(Arrays.asList(angrywords));
if(angryWordSet.contains(word)) 
{
    System.out.print("Yes");
    return true;
}
else return false;

angryWordSet包含疯狂,愤怒,愤怒和发怒的字符串。我把它打印出来以确保它在那里。我不知为何会变得虚假。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

以下代码完美无缺:

public static void main(String s[])
{
    List<String> angry = new ArrayList<String>();
    angry.add("a");
    angry.add("b");
    angry.add("c");
    angry.add("mad");
    angry.add("b");
    angry.add("b");
    String word = "mad";
    Set<String> angryWordSet = new HashSet<String>(angry);
    if (angryWordSet.contains(word))
    {
        System.out.print("Yes");

    }
    else
    {
        System.out.print("No");
    }
}

我假设当你做readline时,单词有&#39; \ n&#39;或者&#39; \ r&#39;字符添加到它,这就是为什么它不匹配&#34;字&#34; varibale。请验证,我没有测试它:)

答案 1 :(得分:3)

我认为,您必须检查每个angryWordSet元素是否存在前导和尾随空格。

for (String s : angryWordSet) {
    if (s.trim().equals(word)) return true;
}
return false;

关于错误的回答尝试。我会留下前一个答案的一部分,希望它对某人有帮助。

  

Object[] toArray()返回包含所有元素的数组   在此列表中以适当的顺序(从第一个元素到最后一个元素)。该   返回的数组将是“安全的”,因为没有引用它   由此列表维护。 (换句话说,这种方法必须分配一个   新阵列)。因此调用者可以自由修改返回的数组。

     

<T> T[] toArray(T[] a)返回一个包含所有内容的数组   此列表中的元素按正确顺序排列(从第一个元素到最后一个元素);   返回数组的运行时类型是指定数组的运行时类型。   如果列表适合指定的数组,则返回其中。   否则,将使用运行时类型分配新数组   指定的数组和此列表的大小。