2014-07-14 72 views

回答

4

你就是不行。 equals()一次只取一個對象。

作爲替代方案,你可以嘗試像

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

Downvoter,三江源服用興趣閱讀我的文章:) –

0

沒有,但你可以使用||測試多個字符串平等:

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

如果事情是"String1 String2 String3"那麼它是平等的。

如果你的意思包含,你可以做

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

if (valid.contains(something)) 
+0

也許'HashSet'或'TreeSet'更好,因爲'包含'操作已完成 - 在大街上憤怒 - in * O(1)*或* O(log n)* –

+2

@CommuSoft對於三個元素,Set可能會變慢。隨着上面元素的數量說8,Set勝出。 –

3

如果你的意思是「我可以測試字符串等於在一個操作數字符串」,使用正則表達式:

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

管char |在正則表達式中的含義是「OR」。

請注意,在java(不像許多其他語言)matches()必須匹配整個字符串 - 即這是一個「等於」的比較,而不是「包含」的比較。

+0

不應該用'^'和'$'包圍正則表達式嗎? –

+3

@CommuSoft no。用'matches()','^'和'$'*表示*。添加它們不起作用。看到我答案的最後一點。自己嘗試一下 - 看看'fooString'或'String1foo'是否匹配(它不) – Bohemian

+0

你是對的...對不起。 –

6

沒有,但對於許多字符串替代是把字符串集合中,做一些這樣的:

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

if (strings.contains("D")) { 
    // ... 
} 

這也許是有點更簡潔。它也是無效的。你想要比較的字符串,這通常非常有用。

請注意Java 7 the switch statement works with strings的進一步說明,如果您希望將不同的操作綁定到不同的字符串,那就很有用。

0

如果你已經通過了javadocs它說

public boolean equals(Object obj);

指示某個其他對象是否「等於」這一項。

它並不是說某些其他對象「等於」這些對象。

使用equals()您可以比較Object和其他一些Object。它不允許你一次比較Object與許多其他對象。但是,如果你想一個Object與許多其他Objects比較,那麼你就需要equals()每個比較討論

1

你可以用給你匹配不包含的特殊字符,或者躲過了串的正則表達式。

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 
} 
0

好,如果你想檢查是否有任何在這樣的字符串不匹配(又名都必須匹配,雖然並沒有真正似乎道理給我),然後

String initString = "String1 String2 String3"; 
String[] splitStrings = initString.split(" "); 
boolean match = true; 
for(String string : splitStrings) 
{ 
    if(!string.equals(something)) 
    { 
     match = false; 
     break; 
    } 
} 
if(match == true) 
{ 
    //did match all of them 
} 
else 
{ 
    //there was one that was not matched 
} 

如果你想要一個「匹配至少一個」,那麼它只是

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)); 
相關問題