如何检查文本段落是否包含字符串数组中可用的单词?

时间:2017-11-08 13:13:21

标签: java arrays

我有一个存储在String变量中的文本段落和包含多个值的String数组,如

String names[] = {"jack", "adam", "jerry adams", "Jon snow"};

如何检查文本段落(存储在String变量中)是否包含name数组中给出的值?

4 个答案:

答案 0 :(得分:2)

Lonely Neuron方法检查并返回true,如果段落中存在任何一个字符串中的字符串。

要检查数组中是否存在数组中的所有值(如注释中所述),则需要进行此轻微修改。

public static boolean textContainsAny(String text, String[] names) {
    for (String name : names) {
        if (!text.contains(name)) {
            return false;
        }
    }
    return true;
}

答案 1 :(得分:1)

这可能略有提升,但是:

String names[] = {"jack", "adam", "jerry adams", "Jon snow"};
String paragraph = "jack and jill went up the hill to meet jerry adams";
boolean onefound = Stream.of(names).anyMatch(paragraph::contains);
bollean allfound = Stream.of(names).allMatch(paragraph::contains);

答案 2 :(得分:1)

您可以使用以下单行

boolean contained = Arrays.stream(names) .noneMatch(name -> !paragraph.contains(name));

请注意,它将区分大小写。 Jackjack不同。

答案 3 :(得分:0)

这应该可以解决问题:

public boolean textContainsAny(String text, String[] names) {
    for (String name : names) {
        if (text.contains(name)) {
            return true;
        }
    }
    return false;
}

使用for (String name : names),我们会迭代names中的所有值,以便我们可以分别检查每个name。然后我们调用text.contains(name)来检查是否包含该特定名称。如果包含任何名称,它将立即返回true,并且不必执行循环的其余部分。如果我们测试了所有name,它将返回false,表示text中没有包含任何名称。我们在一个单独的方法中执行此操作,因此代码可以重复使用。

然后您可以这样称呼它:

public static void main(String[] args) {
    String text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore";
    String names = new String[]{"jack", "adam", "jerry adams", "Jon snow"};
    System.out.println("name is contained: " + textContainsAny(text, names));
}