检查字符串是否包含列表中的元素

时间:2021-03-04 21:33:22

标签: java

我已经定义了一个如下所示的列表

List<String> list = List.of("val1", "val2", "val3");

现在我有以下字符串

String myStr = "rel1,wel12,val1";

现在我需要检查字符串是否有列表中的任何一个元素(在上面的例子中它是真的,因为它有val1,接下来是将该值放入一个变量中

我已经尝试了下面的方法并且它有效,但我相信有更好的方法可以使用任何集合库来做到这一点

List<String> list = List.of("val1", "val2", "val3");
String myStr = "rel1,wel12,val1";

String matchedStr =StringUtils.EMPTY;
String[] vals = myStr.split(",");
for(String val:vals) {
    if(list.contains(val){
      matchedStr=val;
      break;
    }
}

4 个答案:

答案 0 :(得分:1)

您可以使用 Java Streams 获取第一个匹配的字符串:

Optional<String> result = Stream.of(vals).filter(list::contains).findFirst();

答案 1 :(得分:0)

根据问题域中的可能值,可能不需要拆分输入字符串。只需拨打 String#contains

如果是这样,你可以翻转你的逻辑。不是在分割部分上循环,而是在字符串的目标列表上循环。对于列表中的每个字符串,询问未处理的输入字符串是否包含该元素。如果是,请跳出循环。

提示:如果此代码位于返回字符串的方法中,并且在未找到匹配项时返回 null,请了解如何返回 Optional

答案 2 :(得分:0)

如果列表不是太大,你的方式没问题。我也将字符串视为一个列表,因为它可以像您已经完成的那样通过拆分来制作一个列表。您可以从较大的集合中创建一个集合,然后在较小的集合上进行迭代。

另一种方法是找到两个列表的交集。

List<String> list = Arrays.asList("red", "blue", "blue", "green", "red");
List<String> otherList = Arrays.asList("red", "green", "green", "yellow");

现在我们可以找到交点了:

Set<String> result = list.stream()
  .distinct()
  .filter(otherList::contains)
  .collect(Collectors.toSet());

result 应包含“红色”和“绿色”。

Some more info on collectors

答案 3 :(得分:0)

我更喜欢 Zobayer 的回答,或者使用 List#retainAll

<input>

final List<String> first = List.of("one", "two", "three"); final List<String> out = new ArrayList<>(Arrays.asList("five,four,three".split(","))); out.retainAll(first); 包含单个条目 out

相关问题