繁体   English   中英

Java Hashset返回false而不是true

[英]Java Hashset returns false instead of true

这段代码不断返回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包含疯狂,愤怒,愤怒和发怒的字符串。 我把它打印出来以确保它在那里。 我不知为何会变得虚假。 有人可以帮忙吗?

以下代码完美运行:

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时,单词会添加'\\ n'或'\\ r'字符,这就是为什么它与“word”varibale不匹配。 请验证,我没有测试它:)

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM