字符串在java中不等于(字符串1、字符串2或字符串3)
如何测试字符串是否不等于string1、string2或string3?我试过使用| |,但不起作用:字符串在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
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:ifanswer1
为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))