Java 我可以用equals()方法比较多个字符串吗?

Java 我可以用equals()方法比较多个字符串吗?,java,string,Java,String,是否可以使用.equals获取多个字符串 if(something.equals("String1 String2 String3")){ System.out.println(Something); } 我的意思是: if(choose.equals("DO IT")){ sysout blah blah blah } else if(choose.equals("DONT DO IT")){ ... } 不,你不能equals()一次只接受一个对象 作为替代方案,您可以

是否可以使用.equals获取多个字符串

if(something.equals("String1 String2 String3")){
   System.out.println(Something);
}
我的意思是:

if(choose.equals("DO IT")){
   sysout blah blah blah
}
else if(choose.equals("DONT DO IT")){
   ...
}

不,你不能
equals()
一次只接受一个对象

作为替代方案,您可以尝试以下内容

if(something.equals("String1") || something.equals("String2") ||       
                                                 something.equals("String3")) {
   System.out.println(Something);
}

否,但您可以使用
|
测试多个字符串是否相等:

if(something.equals("String1") || something.equals("String2") || something.equals("String3"))){
   System.out.println(Something);
}
如果某个东西是
“String1 String2 String3”
,那么它是相等的

如果你是说包含,你可以做

List<String> valid = Arrays.asList(string1, string2, string3);

if (valid.contains(something))
List valid=Arrays.asList(string1、string2、string3);
如果(有效。包含(某物))
如果您的意思是“我可以在一次操作中测试一个字符串等于多个字符串吗”,请使用正则表达式:

if (something.matches("String1|String2|String3")) {
    System.out.println(Something);
} 
管道字符
|
在正则表达式中表示“或”


请注意,在java中(与许多其他语言不同)
matches()
必须匹配整个字符串-即这是一个“等于”比较,而不是一个“包含”比较。

否,但许多字符串的另一种选择是将字符串放在一个集合中并执行以下操作:

Set<String> strings = new HashSet<>();
strings.add("A");
strings.add("B");
strings.add("C");

if (strings.contains("D")) {
  // ...
}
Set strings=newhashset();
字符串。添加(“A”);
字符串。添加(“B”);
字符串。添加(“C”);
if(strings.contains(“D”)){
// ...
}
这也许更简洁一点。它也是空安全wrt。要比较的字符串,通常非常有用


请进一步注意Java 7,如果您希望将不同的操作绑定到不同的字符串,这非常有用。

如果您已经阅读了它所说的

public boolean等于(Object obj)

指示其他对象是否与此对象“相等”。

它并不是说其他对象与这些对象“相等”。


使用
equals()
可以将
对象
与其他
对象
进行比较。它不允许您同时将
对象
与许多其他对象进行比较。但是,如果要将一个
对象
与许多其他
对象
进行比较,则每个比较都需要
equals()

如果匹配的字符串不包含特殊的正则表达式字符,或者是转义的,则可以使用正则表达式

示例

Pattern p = Pattern.compile("^(String1|String2|String3)$");
if(p.matcher(something).find()) {
    //do something
}

或者,您可以将字符串存储在集合/列表中并查询集合:

示例:

HashSet<String> possible = new HashSet<String>();
possible.add("String1");
possible.add("String2");
possible.add("String3");
if(possible.contains(Something)) {
    //do something
}
HashSet可能=新的HashSet();
可能。添加(“第1条”);
可能。添加(“第2条”);
可能。添加(“第3条”);
如果(可能,包含(某物)){
//做点什么
}

好吧,如果您想检查这样一个字符串中是否有不匹配的内容(即all必须匹配,尽管这对我来说似乎没有什么意义),那么

如果你想要一个“至少匹配一个”,那么它只是

String initString = "String1 String2 String3";
String[] splitStrings = initString.split(" ");
boolean match = false;
for(String string : splitStrings)
{
    if(string.equals(something))
    {
        match = true;
        break;
    }
}
if(match == true)
{
    //did match at least one of them
}
else
{
    //didn't match any of them
}
但老实说,Java 8简化了这一点:

String something = "whatever";
String initString = "String1 String2 String3";
String[] splitStrings = initString.split(" ");
boolean matchAll = Arrays.stream(splitStrings).allMatch((x) -> x.equals(something));
boolean matchAny = Arrays.stream(splitStrings).anyMatch((x) -> x.equals(something));

您不应该用
^
$
包围正则表达式吗?@CommuSoft no.用
匹配()
^
$
是隐含的。添加它们没有效果。请看我回答的最后一点。你自己试试看-看看
fooString
String1foo
是否匹配(它不匹配)。也许
HashSet
TreeSet
更好,因为
包含
操作都是在O(1)或O(logn)中完成的。CommuSoft对于三个元素,一个集合的速度可能较慢。当元素数超过8时,Set获胜。
String something = "whatever";
String initString = "String1 String2 String3";
String[] splitStrings = initString.split(" ");
boolean matchAll = Arrays.stream(splitStrings).allMatch((x) -> x.equals(something));
boolean matchAny = Arrays.stream(splitStrings).anyMatch((x) -> x.equals(something));