使用正则表达式访问列表中的项目

时间:2011-07-29 12:30:38

标签: java regex list arraylist

  

可能重复:
  Search for a regexp in a java arraylist

有没有办法使用正则表达式访问存储在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并检查字符串是否与正则表达式匹配?

2 个答案:

答案 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以支持模式。