字符串在java中不等于(字符串1、字符串2或字符串3)

字符串在java中不等于(字符串1、字符串2或字符串3),java,string,Java,String,如何测试字符串是否不等于string1、string2或string3?我试过使用| |,但不起作用: if (!answer1.equals("s1" || "s2" || "s3")){ System.out.println("..."); } 预先构建一个包含“s1”、“s2”等的集合,然后使用!set.contains(answer1)最简单的方法是“正常”方式: 一些替代方法包括JDK7+上的字符串开关: switch (answer1) { case "s1

如何测试字符串是否不等于string1、string2或string3?我试过使用| |,但不起作用:

 if (!answer1.equals("s1" || "s2" || "s3")){
        System.out.println("...");
 }
预先构建一个包含
“s1”
“s2”
等的
集合,然后使用
!set.contains(answer1)

最简单的方法是“正常”方式:

一些替代方法包括JDK7+上的字符串开关:

switch (answer1) {
  case "s1":
  case "s2":
  case "s3":
    break;
  default:
    // whatever
}
…或:

if (!Arrays.asList("s1", "s2", "s3").contains(answer1)) {
}

您不希望
答案1
“s1”
“s2”
“s3”
,因此您需要进行如下比较:

if (!answer1.equals("s1") && !answer1.equals("s2") && !answer1.equals("s13"))
{
        System.out.println("...");
}
你也可以试试

List<String> strings = Arrays.asList("s1", "s2", "s3");
if (!strings.contains(answer1))
{
    System.out.println("...");
}
List strings=Arrays.asList(“s1”、“s2”、“s3”);
如果(!strings.contains(answer1))
{
System.out.println(“…”);
}

如前所述,您试图在两个字符串上执行OR。举个例子,让我问你一个问题:“s1”还是“s2”?答案是:谁知道呢?这个问题到底在说什么?让我再试一次:它等于“s1”吗?(否)是否等于“s2”?(否)是否等于“s3”?(是的)等等。。。因此:

if(!(answer1.equals("s1") || answer1.equals("s2") || answer.equals("s3")) ) { ... }

试图在字符串上执行或操作是完全无效的;你必须这样做。

这里有一个简单的选择:

if (!"s1,s2,s3".contains(answer1))

假设您的答案不包含逗号,即使是这样,也需要使用边缘大小写才能给出假阳性。

您不能使用逗号或字符串。因此,请尝试
if(!(answer1.equals(“s1”)| | answer1.equals(“s2”)| | answer1.equals(“s3”){System.out.println(“…”)}
,如果
answer1
为null?@DavidWallace:if
answer1
为null,则会抛出一个NullPointerException,因为它应该是这样一个简单的任务,似乎非常不必要而且代价高昂。@JamoBox,如果在加载类时构建一次,则不会。这是一个非常好的答案。我认为更好的做法是使用
回答1.equals(“字符串”)
而不是
回答“字符串”。equals(answer1)
但是写
“字符串”。equals(answer1)
是空安全的。您不必单独检查空值。这就是人们这样做的原因-这样做更好。如果
answer1
没有解析为值,你就不能得到
NullPointerException
吗?@false。实际上最好先使用常量,因为如果变量
null
@DavidWallace收回了我的评论,因为我做了一些研究,结果表明这实际上是一个编码标准,那么它不会抛出NPE。然而,该标准似乎有一些反对意见。一些纯粹主义者称这是一种反模式,正如我在先前删除的评论中所说的,这使维护成为一场噩梦。我似乎也不能收回我的反对票,因为5分钟过去了。很抱歉,在这种情况下我可能会使用集合。他们倾向于实现
contains
方法以尽可能快地工作,因为他们最常用的方法是@Pshemo,这取决于Set的具体实现。使用集合的优点是它们不允许重复;使用列表,您可以多次比较同一字符串。我以这种方式使用列表创建了一个较小的示例,但是按照您的建议,可以使用:Set strings=newhashset(Arrays.asList(“s1”、“s2”、“s3”);
if(!(answer1.equals("s1") || answer1.equals("s2") || answer.equals("s3")) ) { ... }
if (!"s1,s2,s3".contains(answer1))