Java 字符串搜索多个值

Java 字符串搜索多个值,java,string,Java,String,我有一个问题陈述,其中我需要搜索一个包含值列表的巨大文本。搜索的结果应该是找到的值,而不是布尔值true或false 例: String str=“这是java搜索的示例字符串”; 列表值=Arrays.asList(“java”、“net”); 因此,如果我用值搜索字符串str,那么这个搜索的结果应该是“java”,因为str包含“java”。是否有任何库可以实现此目的?是否希望所有值都作为返回列表找到 您可以使用java.util.Set.retainAll(集合)函数 package t

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

例:

String str=“这是java搜索的示例字符串”;
列表值=Arrays.asList(“java”、“net”);

因此,如果我用
搜索
字符串str
,那么这个搜索的结果应该是“java”,因为
str
包含
“java”
。是否有任何库可以实现此目的?

是否希望所有值都作为返回列表找到

您可以使用
java.util.Set.retainAll(集合)
函数

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

    }
}
封装测试;
导入java.util.array;
导入java.util.HashSet;
导入java.util.Set;
公共类Test2{
公共静态void main(字符串[]args){
String str=“这是java搜索的示例字符串”;
Set values=newhashset(Arrays.asList(“java”、“net”、“a”));
Set split=newhashset(Arrays.asList(str.split(“”));
价值。保留(分割);
System.out.println(“在文本中找到的值:“+值”);
}
}
输出:

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


如果需要第一个匹配值,可以使用
api:

String value = values.stream()
                     .filter(str::contains)
                     .findFirst()
                     .orElse(null);
如果您想要全部:

values.removeIf(s -> !str.contains(s));
这使得
仅包含
str中包含的元素

或者如果您不想修改

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

收集器.toSet()不是更好吗?@StephanHogenboom well
values
已经是一个
列表了(我假设它是不同的),所以结果不可能更清晰。但是我同意一套
可能会更好
List<String> newValues = values.stream()
                               .filter(str::contains)
                               .collect(Collectors.toList());