在Java中使用星号和问号来匹配

问题描述:

我想在java中是这样写的文件的名称:在Java中使用星号和问号来匹配

public class MyMatcher 
{ 
    public static boolean isMatching(String filename, String param) { 
     ... 
    } 
} 

文件名是文件的名称,而不目录 (如:自述.txt,shares.csv,一首不错的歌曲.mp3,...)

param会像“* .mp3”一样来表示所有以.mp3结尾的文件等等。

注意:param不是正则表达式语句,更像是像在textpad或eclipse或甚至dos目录上搜索文件的常用方式。

有人可以建议如何做到这一点,或者如果有一些开源库来做到这一点?

+0

所以PARAM可以是 “*的.m 3?”? – 2011-04-14 11:13:05

Apache Commons IOWilcardFileFilter

通配符匹配使用字符 '?'和'*'来表示单个或多个通配符。从的Javadoc

实施例:

File dir = new File("."); 
FileFilter fileFilter = new WildcardFileFilter("*test*.java~*~"); 
File[] files = dir.listFiles(fileFilter); 
for (int i = 0; i < files.length; i++) { 
    System.out.println(files[i]); 
} 
+0

谢谢我会检查这一点。 – chacko 2011-04-14 12:53:58

String pattern = param.replaceAll ("\\*", ".*").replaceAll ("\\?", "."); 
return filename.matches (pattern); 
+0

如果匹配的字符串已经是正则表达式或包含正则表达式的特殊符号,将无法按预期工作。例如:“my。*。mp3”不仅会匹配“my.somefile.mp3”,还会匹配“myxsomefile.mp3”和“myxsomefilexmp3”。 – Scadge 2016-01-26 13:15:06

+0

是的。如果您有这种情况,则需要更复杂的处理。 – 2016-01-27 02:10:17