有没有办法使用正则表达式访问存储在List中的项目?
以下面的代码为例:
String jpg = "page1.jpg";
String jpeg = "page-2.jpeg";
String png = "page-003.png";
ArrayList<String> images = new ArrayList<String>();
images.add( jpg );
images.add( jpeg );
images.add( png );
Pattern regex = Pattern.compile( "\\D{4,5}0*1.\\w{3,4}" );
int index = images.indexOf( regex );
if( index != -1 )
System.out.println( "Did find the string" );
else
System.out.println( "Didn't find the string" );
上面的代码无法找到字符串page1.jpg
,而是返回-1
。
有没有办法可以实现这一点而无需迭代List并检查字符串是否与正则表达式匹配?
答案 0 :(得分:3)
不是真的。除了子类化ArrayList
或使用scala,groovy等之外,没有。 indexOf
使用equals
方法,因此您被卡住了。
如果您愿意使用黑暗艺术,可以使用equals
方法创建一个使用正则表达式的自定义类。
int index = images.indexOf(new Object() {
public boolean equals(Object obj) {
return regex.matches(obj.toString());
}
});
但我只是迭代。它更清洁。你是同事,你自己在6个月的时间内会很感激。
答案 1 :(得分:1)
上面的代码无法找到字符串page1.jpg和 而是返回-1。
不应该那样工作。 ArrayList.indexOf的Object参数应该是您希望在集合中的对象。
你可以做的是扩展ArrayList并重载indexOf以支持模式。