java文件名过滤模式

Ser*_*erg 9 java regex filenames filter

我需要实施

File[] files = getFiles( String folderName, String ptrn );
Run Code Online (Sandbox Code Playgroud)

其中ptrn是一个命令提示符样式模式,如"*2010*.txt"

我熟悉FilenameFilter类,但无法实现, public boolean accept(File dir, String filename) 因为String.matches()不接受这样的模式.

谢谢!

Bal*_*usC 19

所述String#matches()接受的正则表达式 模式.

"外行人"变体的正则表达式变体*2010*.txt将是.*2010.*\.txt.

所以以下应该有效:

public boolean accept(File dir, String name) {
    return name.matches(".*2010.*\\.txt");
}
Run Code Online (Sandbox Code Playgroud)

双反斜杠只是代表一个实际的反斜杠,因为反斜杠本身是Java中的转义字符String.

或者,您也可以使用其他String方法在没有正则表达式的情况下执行此操作:

public boolean accept(File dir, String name) {
    return name.contains("2010") && name.endsWith(".txt");
}
Run Code Online (Sandbox Code Playgroud)

你最好的选择可能是ptrn代表一个真正的正则表达式模式,或用字符串替换每个.with \.*with,.*以便它成为一个有效的正则表达式模式.

public boolean accept(File dir, String name) {
    return name.matches(ptrn.replace(".", "\\.").replace("*", ".*"));
}
Run Code Online (Sandbox Code Playgroud)