2013-04-25 85 views
31

在Java中,我想檢查一個字符串是否存在於List<String> myList中。Java,返回如果List包含字符串

事情是這樣的:

if(myList.contains("A")){ 
    //true 
}else{ 
    // false 
} 

問題是myList中可以包含未修剪的數據:

{' A', 'B ', ' C '} 

我想它,如果我的項目'B'在列表返回true。我應該怎麼做?我想避免循環結構。

+0

AFAIK in vanilla JDK,no。我猜想在Java 8中,閉包你將在一行中實現這一點。 – 2013-04-25 15:30:50

+0

我該如何實現它。無需編寫循環條件。實際上,它會在內部檢查每個字符串。但我希望它在單行中;) – Reddy 2013-04-25 15:32:18

+0

正如我所說的,你無法用簡單的Java在單行**中實現這個**。有些庫可以幫助你完成這項工作。 – 2013-04-25 15:33:35

回答

33

您需要遍歷列表,並呼籲String#trim用於搜索:

String search = "A"; 
for(String str: myList) { 
    if(str.trim().contains(search)) 
     return true; 
} 
return false; 

或者如果你想執行忽視病例檢索,然後使用:

search = search.toLowerCase(); // outside loop 

// inside the loop 
if(str.trim().toLowerCase().contains(search)) 
4
String search = "A"; 
for(String s : myList) 
    if(s.contains(search)) return true; 
return false; 

這將遍歷列表中的每個字符串,並檢查它是否包含您要查找的字符串。如果只有你想陷阱的空間,你可以這樣做:

String search = "A"; 
for(String s : myList) 
    if(s.replaceAll(" ","").contains(search)) return true; 
return false; 

這將首先搜索之前更換空字符串的空間。此外,如果你只是想先修剪字符串,你可以這樣做:

String search = "A"; 
for(String s : myList) 
    if(s.trim().contains(search)) return true; 
return false; 
2

您可以使用一個近似串匹配庫要做到這一點,例如, SecondString,但這幾乎肯定是矯枉過正 - 只是使用其中一個for循環回答。

14

您可以通過使用正則表達式做一個單行:

if (myList.toString().matches(".*\\bA\\b.*")) 

此代碼應執行得非常好。


順便說一句,你可以從一個變量構建正則表達式,像這樣:

.matches("\\[.*\\b" + word + "\\b.*]") 

我加入[]到每一端,以防止當搜索詞包含一個開放的假陽性匹配/在開始/結束處關閉方括號。

2

試試這個:

for(String str: myList) { 
    if(str.trim().equals("A")) 
     return true; 
} 
return false; 

您需要使用str.equalsstr.equalsIgnoreCase代替contains因爲containsstring作品不一樣containsList

List<String> s = Arrays.asList("BAB", "SAB", "DAS"); 
s.contains("A"); // false 
"BAB".contains("A"); // true 
27

與Java 8個流API:

List<String> myList = Arrays.asList(" A", "B ", " C "); 
return myList.stream().anyMatch(str -> str.trim().equals("B")); 
相關問題