2017-04-14 139 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) 
相关问题