在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目录上搜索文件的常用方式。
有人可以建议如何做到这一点,或者如果有一些开源库来做到这一点?
Apache Commons IO有WilcardFileFilter:
通配符匹配使用字符 '?'和'*'来表示单个或多个通配符。从的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]);
}
谢谢我会检查这一点。 – chacko 2011-04-14 12:53:58
String pattern = param.replaceAll ("\\*", ".*").replaceAll ("\\?", ".");
return filename.matches (pattern);
如果匹配的字符串已经是正则表达式或包含正则表达式的特殊符号,将无法按预期工作。例如:“my。*。mp3”不仅会匹配“my.somefile.mp3”,还会匹配“myxsomefile.mp3”和“myxsomefilexmp3”。 – Scadge 2016-01-26 13:15:06
是的。如果您有这种情况,则需要更复杂的处理。 – 2016-01-27 02:10:17
所以PARAM可以是 “*的.m 3?”? – 2011-04-14 11:13:05