Java:如何比较多个字符串?

时间:2013-11-20 00:48:51

标签: java

我想知道如何在一行中比较多个字符串。我尝试使用||但它不适用于布尔值或字符串。这就是我的代码:

}else if(question != "a" || "b") {
    System.out.println("Sorry that isn't an A or a B");

对于那些标记为重复的人,我在堆栈溢出时检查了200多个问题,但没有一个有效。 @Chrylis发布的那个实际上并没有帮助。他们只是在询问==和.equals()

之间的区别

6 个答案:

答案 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");
}