使用 Java 中的包含不匹配字符串

String is not matching using contains in Java

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

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

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

此程序输出 false

请帮帮我!

class ArrayListcontains() 方法并不像您认为的那样采用正则表达式。

这样一行:

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

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

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(.*)"));

ArrayList 的contains 方法不支持正则表达式查询或通配符。检查此 Whosebug post 以了解如何实现此功能:

Search for a regexp in a java arraylist

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