在Java中,我想檢查一個字符串是否存在於List<String> myList
中。Java,返回如果List包含字符串
事情是這樣的:
if(myList.contains("A")){
//true
}else{
// false
}
問題是myList中可以包含未修剪的數據:
{' A', 'B ', ' C '}
我想它,如果我的項目'B'
在列表返回true。我應該怎麼做?我想避免循環結構。
在Java中,我想檢查一個字符串是否存在於List<String> myList
中。Java,返回如果List包含字符串
事情是這樣的:
if(myList.contains("A")){
//true
}else{
// false
}
問題是myList中可以包含未修剪的數據:
{' A', 'B ', ' C '}
我想它,如果我的項目'B'
在列表返回true。我應該怎麼做?我想避免循環結構。
您需要遍歷列表,並呼籲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))
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;
您可以使用一個近似串匹配庫要做到這一點,例如, SecondString,但這幾乎肯定是矯枉過正 - 只是使用其中一個for循環回答。
您可以通過使用正則表達式做一個單行:
if (myList.toString().matches(".*\\bA\\b.*"))
此代碼應執行得非常好。
順便說一句,你可以從一個變量構建正則表達式,像這樣:
.matches("\\[.*\\b" + word + "\\b.*]")
我加入[
和]
到每一端,以防止當搜索詞包含一個開放的假陽性匹配/在開始/結束處關閉方括號。
試試這個:
for(String str: myList) {
if(str.trim().equals("A"))
return true;
}
return false;
您需要使用str.equals
或str.equalsIgnoreCase
代替contains
因爲contains
在string
作品不一樣contains
在List
List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true
與Java 8個流API:
List<String> myList = Arrays.asList(" A", "B ", " C ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
AFAIK in vanilla JDK,no。我猜想在Java 8中,閉包你將在一行中實現這一點。 – 2013-04-25 15:30:50
我該如何實現它。無需編寫循環條件。實際上,它會在內部檢查每個字符串。但我希望它在單行中;) – Reddy 2013-04-25 15:32:18
正如我所說的,你無法用簡單的Java在單行**中實現這個**。有些庫可以幫助你完成這項工作。 – 2013-04-25 15:33:35