我正在使用list
来匹配字符串。请看一下我的源代码:
List<String> list=new ArrayList<String>();
list.add("my-name-is-foo");
match = list.contains("(.*)name(.*)");
此程序将false
作为输出。
请帮助我!
答案 0 :(得分:2)
要检查列表中的正则表达式的内容,您需要迭代它:
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(.*)"));
答案 1 :(得分: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());
答案 2 :(得分:0)
类contains()
的{{1}}方法不会采用正则表达式,因为您似乎认为它。
这样的一行:
ArrayList
将查找文字字符串match = list.contains("(.*)name(.*)");
,而不是正则表达式匹配。
如果你想进行正则表达式匹配,你必须遍历列表中的字符串并测试每个字符串是否与正则表达式匹配。
"(.*)name(.*)"
答案 3 :(得分:0)
ArrayList的contains方法不支持正则表达式查询或通配符。请查看此stackoverflow文章,了解如何实现此目的: