我想知道如何在一行中比较多个字符串。我尝试使用||但它不适用于布尔值或字符串。这就是我的代码:
}else if(question != "a" || "b") {
System.out.println("Sorry that isn't an A or a B");
对于那些标记为重复的人,我在堆栈溢出时检查了200多个问题,但没有一个有效。 @Chrylis发布的那个实际上并没有帮助。他们只是在询问==和.equals()
之间的区别答案 0 :(得分:8)
首先,不要将==
用于字符串。你以后会知道为什么。您希望按内容比较字符串,而不是它们在内存中的位置。在极少数情况下,"a"
字符串可以将false与另一个名为"a"
的字符串进行比较。
其次,将其拆分,以便在比较结果上执行布尔逻辑:
else if(!(question.equals("a") || question.equals("b")) {
答案 1 :(得分:3)
您可以尝试使用Arrays.asList()
:
else if (!Arrays.asList("a", "b").contains(question)) {
...
}
答案 2 :(得分:1)
有两个错误:您不能只使用||
(或&&
)指定多个值。您需要每次都明确指定左侧和右侧。
其次,使用equals
来比较String
值,而不是==
(或在这种情况下为!=
)运算符。 ==
比较两个对象引用以查看它们是否是同一个对象。
} else if (!("a".equals(question) || "b".equals(question)))
或另一种方法是使用make a temporary List
并使用contains
,对于需要测试的较长列表,这可能会更清晰:
} else if (!Arrays.asList("a", "b").contains(question))
答案 3 :(得分:0)
另外,您应该将equals
用于不是==
要回答您的问题,您必须在||
}else if( ! (question.equals("a") || question.equals("b")) ) {
答案 4 :(得分:0)
}else if( !(question.equals("a") || question.equals("b")) {
System.out.println("Sorry that isn't an A or a B");
你做不到NOT equals a OR b
你必须NOT(equals a OR equals b)
其次,您要将字符串与!=
进行比较,但您应该使用。equals(String)
方法比较字符串。这已被说了数百万次,但是:==
和!=
正在比较对象引用,而.equals(String)
正在比较String 值
答案 5 :(得分:0)
String[] options = {"a", "b"}; // Must be sorted.
if (java.util.Arrays.binarySearch(options, question) < 0) {
System.out.println("Sorry that isn't an A or a B");
}
或者(假设您的字符串不包含|
:
if ("a|b".indexOf(question) == -1) {
System.out.println("Sorry that isn't an A or a B");
}