这段代码不断返回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包含疯狂,愤怒,愤怒和发怒的字符串。我把它打印出来以确保它在那里。我不知为何会变得虚假。有人可以帮忙吗?
答案 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)
返回一个包含所有内容的数组 此列表中的元素按正确顺序排列(从第一个元素到最后一个元素); 返回数组的运行时类型是指定数组的运行时类型。 如果列表适合指定的数组,则返回其中。 否则,将使用运行时类型分配新数组 指定的数组和此列表的大小。