【问题标题】:String is not matching using contains in Java在 Java 中使用 contains 不匹配字符串
【发布时间】:2015-06-13 11:02:15
【问题描述】:

我使用list 来匹配字符串。请看我的源代码:

List<String> list=new ArrayList<String>();
list.add("my-name-is-foo");

match = list.contains("(.*)name(.*)");

此程序将false 作为输出。

请帮帮我!

【问题讨论】:

  • 我很确定这里的“包含”将寻找完全匹配..不执行任何正则表达式匹配。您需要手动遍历列表的内容并检查每个字符串。

标签: java regex contains


【解决方案1】:

要根据正则表达式检查列表的内容,您需要对其进行迭代:

List<String> list=new ArrayList<String>();
list.add("my-name-is-foo");

match = false;
for (String s : list) {
    if (s.matches("(.*)name(.*)")) {
        match = true;
        break;
    }
}

List#contains 通过相等来检查存在,而不是通过对元素应用正则表达式。

在 Java 8 中:

match = list.stream().anyMatch(s -> s.matches("(.*)name(.*)"));

【讨论】:

  • 我们如何打印所有使用 java 8 lambda 表达式匹配的元素?
  • 我会在一分钟后给一个sn-p
  • 要打印所有匹配的元素,请使用:match = list.stream().filter(s -&gt; s.matches("(.*)name(.*)")).forEach(System.out::println);
【解决方案2】:

Java 8 风格:

    List<String> list = new ArrayList<String>();
    list.add("1-name-1");
    Pattern p = Pattern.compile("(.*)name(.*)");
    boolean f = list.stream().anyMatch(p.asPredicate());

【讨论】:

  • 对于 Java 8 sn-p:+1
【解决方案3】:

ArrayList 类的 contains() 方法不像您想的那样采用正则表达式。

这样的一行:

match = list.contains("(.*)name(.*)");

将查找文字字符串"(.*)name(.*)",而不进行正则表达式匹配。

如果要进行正则表达式匹配,则必须遍历列表中的字符串并测试每个字符串是否与正则表达式匹配。

Pattern pattern = Pattern.compile("(.*)name(.*)");

for (String element : list) {
    if (pattern.matcher(element).matches()) {
        System.out.println("Found a match: " + element);
    }
}

【讨论】:

    【解决方案4】:

    ArrayList 的 contains 方法不支持正则表达式查询或通配符。查看此 stackoverflow 帖子,了解如何实现此功能:

    Search for a regexp in a java arraylist

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 2017-01-09
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多