2011-07-29 57 views
4

可能重複:
Search for a regexp in a java arraylist使用正則表達式來訪問列表中的項目

是否有訪問存儲在使用正則表達式一個列表項的方法嗎?

採取下面的代碼作爲示例:

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

有沒有一種方法,這可以不通過列表迭代和檢查字符串是否與正則表達式匹配來實現?

+0

@Aaron Sheffey的 - 我沒有看到這個問題,但提問者明確希望所有在那裏,我只想要一個單一的項目(匹配正則表達式,由於不會有倍數)相匹配的項目。我已經具體詢問是否有一種方法可以做到這一點,以反覆構成上述問題中提供的答案。 –

+0

@我的頭痛 - 爲什麼你如此反對迭代? indexOf在內部使用迭代。 – sblundy

+0

@sblundy - 我不反對迭代 - 我只是想知道是否有沒有辦法做到這一點。我打算強調,由於他正在投票結束我的問題,所以在我的問題上與Aaron在他的評論中有所不同。 –

回答

3

不是。短的子類ArrayList或使用scala,groovy等,沒有。 indexOf使用equals方法,所以你卡住了。

如果你願意使用黑暗魔法,你可以創建與使用正則表達式一個equals方法的自定義類。

​​

但我只是迭代。它更乾淨。你是同事,在6個月內你會感激你。

+0

感謝 - 自定義類對於我正在使用的代碼有點過分殺死,所以我只是迭代(並且像您說的那樣,代碼更清晰, 更好) –

1

上面的代碼無法找到字符串page1.jpg和 而是返回-1。

它不應該是這樣的。 ArrayList.indexOf的Object參數應該是您期望在集合中的對象。

你可以做的是延長ArrayList和超負荷的indexOf支持模式。

相關問題