[英]Regex not matching the end of a filename
我需要過濾出以“ _done”結尾的目錄中的文件。
該目錄包含三個.txt文件,即需要過濾掉的format1.txt , format2.txt和format2_done.txt 。
下面的示例正確列出了所有文件:
System.out.println("all files: ");
String[] files = folder.list();
for (String item : files) {
System.out.println(item);
}
輸出:
all files:
format1.txt
format2.txt
format2_done.txt
但是以下示例:
System.out.println("filtered: ");
String[] filteredFiles = folder.list((File folder, String name)
-> {return !(name.matches("_done.txt>"));});
for (String item : filteredFiles) {
System.out.println(item);
}
產生相同的輸出,不過濾任何內容:
filtered:
format1.txt
format2.txt
format2_done.txt
我究竟做錯了什么?
嘗試改用此正則表達式.*_done\\\\.txt$
如下所示:
String[] filteredFiles = folder.list((File folder, String name)
-> !name.matches(".*_done\\.txt$")
);
細節 :
.*
零個或多個字符 _done\\\\.txt
,請注意,您應使用\\\\
轉義點 $
結束錨 或者,您可以只使用String :: endsWith :
String[] filteredFiles = folder.list((File folder, String name)
-> !name.endsWith("_done.txt")
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.