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

 

posted on 2023-06-05 11:43  upupup-999  阅读(123)  评论(0编辑  收藏  举报