字符串搜索多个值

时间:2019-05-22 12:34:08

标签: java string

我有一个问题陈述,其中我需要搜索包含值列表的巨大文本。搜索的结果应该是找到的值,而不是布尔值true或false。

例如:

String str = "this a sample string for java search";  
List<String> values = Arrays.asList("java", "net");

因此,如果我用String str搜索values,则搜索的结果应该是“ java”,因为str包含"java"。有没有图书馆可以做到这一点?

2 个答案:

答案 0 :(得分:2)

是否要找到所有值作为返回列表?

您可以使用java.util.Set.retainAll(Collection<?>)函数。

package test;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Test2 {

    public static void main(String[] args) {
        String str = "this is a sample string for java search";

        Set<String> values = new HashSet<String>(Arrays.asList("java", "net", "a"));
        Set<String> split = new HashSet<String>(Arrays.asList(str.split(" ")));
        values.retainAll(split);

        System.out.println("Values found in text: "+values);

    }
}

输出:

  

在文本中找到的值:[a,java]

答案 1 :(得分:1)

如果您想要第一个匹配值,则可以使用Stream api:

String value = values.stream()
                     .filter(str::contains)
                     .findFirst()
                     .orElse(null);

如果您要全部:

values.removeIf(s -> !str.contains(s));

离开values仅包含str中包含的元素

或者如果您不想修改values

List<String> newValues = values.stream()
                               .filter(str::contains)
                               .collect(Collectors.toList());