检查string是否包含数组中的所有字符串

时间:2017-04-14 10:20:33

标签: java arrays string

如何检查String是否包含来自Strings的所有Array

我目前的代码:

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");   
    }
}

7 个答案:

答案 0 :(得分:5)

如果将代码封装到单独的方法中,代码看起来会更好:

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

答案 1 :(得分:3)

使用boolean变量来告诉您每个关键字是否匹配。将其设置为true作为默认值。然后检查每个关键字:如果您的单词中没有任何关键字,请停止搜索并将变量设置为false

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

答案 2 :(得分: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");
}

答案 3 :(得分:0)

注意此解决方案仅在您的关键字包含 一个字符 时才有效,如果您的关键字包含多个字符,则已提及许多答案

有一行:

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

检查您的array2是否包含第二个containsAll的所有元素
boolean contain = Arrays.asList(split).containsAll(Arrays.asList(keywords));

答案 4 :(得分:0)

使用StringUtils(org.apache.commons.lang.StringUtils)。它将返回第一次出现的关键字的索引,如果不存在,则返回-1。

StringUtils.indexOfAny(word, keywords);

或者您可以使用Arrays来返回布尔值。

Arrays.asList(word).contains(keywords)

答案 5 :(得分:-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");   
}

如果计数器等于关键字长度,则表示包含所有元素。使用此解决方案,您还可以找出该单词匹配的关键字数量。

答案 6 :(得分:-2)

更好的代码是:

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