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