/**
* 字符串模糊匹配
* <p>example:
* <p> user* user-add -- true
* <p> user* art-add -- false
* @param patt 表达式
* @param str 待匹配的字符串
* @return 是否可以匹配
*/
public static boolean vagueMatch(String patt, String str) {
// 两者均为 null 时,直接返回 true
if(patt == null && str == null) {
return true;
}
// 两者其一为 null 时,直接返回 false
if(patt == null || str == null) {
return false;
}
// 如果表达式不带有*号,则只需简单equals即可 (这样可以使速度提升200倍左右)
if( ! patt.contains("*")) {
return patt.equals(str);
}
// 正则匹配
return Pattern.matches(patt.replaceAll("\\*", ".*"), str);
}
/**
* 判断:集合中是否包含指定元素(模糊匹配)
* <p> 参数 [集合, 元素]
*/
public BiFunction<List<String>, String, Boolean> hasElement = (list, element) -> {
// 空集合直接返回false
if(list == null || list.size() == 0) {
return false;
}
// 先尝试一下简单匹配,如果可以匹配成功则无需继续模糊匹配
if (list.contains(element)) {
return true;
}
// 开始模糊匹配
for (String patt : list) {
if(SaFoxUtil.vagueMatch(patt, element)) {
return true;
}
}
// 走出for循环说明没有一个元素可以匹配成功
return false;
};