CodeMonkey流水账:Java通配符转正则表达式

通配符转正则表达式

/**
* @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();
        });
}

猜你喜欢

转载自blog.csdn.net/ddrfan/article/details/105712904