/**
* 字符串模糊匹配
* <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;
};