我有一个问题陈述,其中我需要搜索包含值列表的巨大文本。搜索的结果应该是找到的值,而不是布尔值true或false。
例如:
String str = "this a sample string for java search";
List<String> values = Arrays.asList("java", "net");
因此,如果我用String str
搜索values
,则搜索的结果应该是“ java”,因为str
包含"java"
。有没有图书馆可以做到这一点?
答案 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());