2017-04-14 186 views
2

如何檢查String是否包含Array的所有Strings檢查字符串是否包含數組中的所有字符串

我當前的代碼:

String word = "abc"; 
String[] keywords = {"a", "d"}; 

for(int i = 0; i < keywords.length; i++){ 
    if(word.contains(keywords[i])){ 
     System.out.println("Yes"); 
    }else{ 
     System.out.println("No"); 
    } 
} 
+5

@Tomask只要這是一個有效的問題,作業並不重要。 –

+0

那麼你現在的代碼有什麼問題? –

回答

5

的代碼看起來更漂亮,如果你把它包裝成獨立方法:

public static boolean containsAllWords(String word, String ...keywords) { 
    for (String k : keywords) 
     if (!word.contains(k)) return false; 
    return true; 
} 
3

使用boolean變量,會告訴你,如果每個關鍵字匹配。將其設置爲默認值true。然後檢查每個關鍵詞:如果您的文字中沒有包含任何關鍵詞,請停止搜索並將您的變量設置爲false

boolean containsAll = true; 
for (String keyword : keywords){ 
    if (!word.contains(keyword)){ 
     containsAll = false; 
     break; 
    } 
} 
-2

只需使用一個計數器:

String word = "abc"; 
String[] keywords = {"a", "d"}; 

int counter = 0; 

for(int i = 0; i < keywords.length; i++){ 
    if(word.contains(keywords[i])){ 
     counter++; 
    } 
} 

if(counter == keywords.length){ 
    System.out.println("Yes"); 
}else{ 
    System.out.println("No"); 
} 

如果計數器等於關鍵字的長度,這意味着所有元素都包含。有了這個解決方案,您還可以找出該詞匹配了多少個關鍵字。

+0

我不明白你的意思是對不起 – Aurasphere

-2

更好的代碼如下:

for(String s: keywords){ 
    if(word.contains(s)){ 
     System.out.println("Yes"); 
    }else{ 
     System.out.println("No"); 
    } 
} 
+0

你忘記了斷言。 – gifpif

+0

評論前,請確保你的代碼是正確的,並且還要謹慎解釋你的。 –

2

如果您使用的是Java 8+,你可以使用一個Stream和測試,如果所有的元素有一行符合您的標準。像,

if (Stream.of(keywords).allMatch(word::contains)) { 
    System.out.println("Yes"); 
} else { 
    System.out.println("No"); 
} 

在早期版本,或者如果你想了解什麼上面在做什麼,它可能看起來像

boolean allMatch = true; 
for (String kw : keywords) { // <-- for each kw in keywords 
    if (!word.contains(kw)) { // <-- if "word" doesn't contain kw 
     allMatch = false;  // <-- set allMatch to false 
     break;    // <-- stop checking 
    } 
} 
if (allMatch) { 
    System.out.println("Yes"); 
} else { 
    System.out.println("No"); 
} 
0

注意該解決方案的工作只有當您的關鍵字中包含一個通道ar,如果您的關鍵字包含多於一個字符,則已經提到了很多答案。

隨着一行:

boolean contain = Arrays.asList(word.split("")).containsAll(Arrays.asList(keywords)); 

的理念是:

String word = "abc"; 
String[] split = word.split(""); 

分裂您的字符串來獲得字符數組split = {a, b, c}

String[] keywords = {"a", "b"}; 

檢查您array1包含使用containsAll

boolean contain = Arrays.asList(split).containsAll(Arrays.asList(keywords)); 
+0

將不適用於'keywords = {「ab」,「bc」} – CoronA

+0

@CoronA,但OP的例子包含一個字母,而不是像你一樣 –

+0

@JCF:算法通常不解決例子,但問題。 – CoronA

0

要麼使用StringUtils的(org.apache.commons.lang.StringUtils)的第二array2的所有元素。它將返回首次出現關鍵字的索引,如果不存在則返回-1。

StringUtils.indexOfAny(word, keywords); 

或者您可以使用Arrays這將返回布爾值。

Arrays.asList(word).contains(keywords) 
相關問題