通配符转正则表达式
/**
* @param str - a WildCard String, as a file name or sth, format like "A*.*" to match.
* @return - a RegularExpression converted from that WildCard str, format like "^A.*\..*$";
*/
public static String WildCard2RegEx(String str) {
String s = str;
s = s.replace('.', '#');
s = s.replaceAll("#", "\\\\.");
s = s.replace('*', '#');
s = s.replaceAll("#", ".*");
s = s.replace('?', '#');
s = s.replaceAll("#", ".?");
s = "^" + s + "$";
return s;
}
然后就可以用了。
PS:下面有个lambda表达式,与主题无关。
PS2:类似本地文件或者FTP的listFiles,真的应该支持通配符。
只支持正则表达式简直反人类。难道他们都不用ls *.*么。其次类似FTP的返回如果不在服务端过滤名称,有效率问题吧???
for(String inPath : inPathList){
File inDir = new File(inPath);
BaseList = inDir.listFiles(pathname -> {
Pattern pattern = Pattern.compile(WCUtil.WildCard2RegEx("A*.dat"));
return pattern.matcher(pathname.getName()).matches();
});
}