`

java实现路径通配符*,**,?

    博客分类:
  • java
 
阅读更多

* 表示匹配0或多个不是/的字符

** 表示匹配0或多个任意字符

? 表示匹配1个任意字符

/**
     * 将通配符表达式转化为正则表达式
     * @param path
     * @return
     */
    private static String getRegPath(String path) {
        char[] chars = path.toCharArray();
        int len = chars.length;
        StringBuilder sb = new StringBuilder();
        boolean preX = false;
        for(int i=0;i<len;i++){
            if (chars[i] == '*'){//遇到*字符
                if (preX){//如果是第二次遇到*,则将**替换成.*
                    sb.append(".*");
                    preX = false;
                }else if(i+1 == len){//如果是遇到单星,且单星是最后一个字符,则直接将*转成[^/]*
                    sb.append("[^/]*");
                }else{//否则单星后面还有字符,则不做任何动作,下一把再做动作
                    preX = true;
                    continue;
                }
            }else{//遇到非*字符
                if (preX){//如果上一把是*,则先把上一把的*对应的[^/]*添进来
                    sb.append("[^/]*");
                    preX = false;
                }
                if (chars[i] == '?'){//接着判断当前字符是不是?,是的话替换成.
                    sb.append('.');
                }else{//不是?的话,则就是普通字符,直接添进来
                    sb.append(chars[i]);
                }
            }
        }
        return sb.toString();
    }

 

 /**
     * 通配符模式
     * @param whitePath - 白名单地址
     * @param reqPath - 请求地址
     * @return
     */
    private static boolean wildcardEquals(String whitePath, String reqPath) {
        String regPath = getRegPath(whitePath);
        return Pattern.compile(regPath).matcher(reqPath).matches();
    }

 

public static void main(String[] args) {
        String[] whiteList = new String[]{
                "/abc/?df/ddd",  "/abc/df/dfd",  "/abc/***/dfd", "/abc/*", "/abd/**", "/g??gle", "/*.do","/ttt"
        };
        boolean r = FilterUtil.checkWhiteList("/abc/1/ss/dfd",whiteList);
        System.out.println(r);
    }

 

分享到:
评论

相关推荐

    Java使用路径通配符加载Resource与profiles配置使用详解

    主要介绍了Java使用路径通配符加载Resource与profiles配置使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    XML纯解析源码(JAVA 不含DOM类)

    * 模拟SQL通配符 ? % _ [abc1-9]格式字符串 * * @param format * 格式字符串 如:邮箱:%@%_ * @param value * 被判断的值 yiyongpeng@tom.com * @return 是否匹配 */ public boolean like(String format,...

    java命名规范 开发规范

    1. Action建议统一遵守通配符的约定,basePath/web/moduleName/*_ *.action {1}  EntityName,{2}  ActionMethodName 2. 统一命名规则:接口类似UserService,接口实现类型UserServiceImpl;(IUserService和...

    java反编译工具(可以集成到eclipse当中)

    将jad 所在目录加到path路径中即可:set path=%path%;f:\java\jad 若要了解jad更为详细的使用帮助信息,直接运行jad.exe查看 以下假设jad.exe在c:\java目录下 一、基本用法 Usage:jad [option(s)] 直接输入类...

    java类查找工具jclassfinder(1b2)

    支持通配符*(代表任意多个字符)和?(代表一个字符)。选项: 区分大小写:类名区分大小写,即查找与输入的类名大小写完全一致的类。 完整类名: 输入的类名包含"包内路径"。路径不必完全,如java.util.scanner或util....

    java项目源码之UrlRewriter Java v2.0 RC1-urlrewriterjava.rar

    UrlRewriter Java v2.0 RC1 是一个基于 Java 的 URL 重写工具,旨在帮助开发人员实现灵活的 URL 重定向和重写功能。以下是该工具的主要实现描述: 核心功能实现: 使用 Java 编程语言实现了 URL 重写核心功能,...

    Wildcards:代码的目的是在作为输入给出的目录路径中接受通配符,以给出满足输入路径的目录列表的输出

    为了实现这一点,我首先将目录路径拆分为单独的文件夹并将其存储到字符串数组中。 这个数组作为参数之一传递给我作为递归函数创建的 _getDirectoryList 方法。 它从数组的第一个元素开始并检查它的下一个元素,如果...

    wildcard:Java中高效的文件系统模式匹配

    通配符是一个小型Java库,可以执行文件和目录的有效模式匹配。 路径可以与通配符或正则表达式匹配。 匹配的文件可以轻松地复制,删除,压缩等。地球匹配glob方法使用文字字符和可选的通配符收集文件和目录: Paths ...

    数据结构与算法分析Java语言描述(第二版)

    Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...

    数据结构与算法分析_Java语言描述(第2版)]

    Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...

    wildcard, 在Java中,高效的文件系统 Pattern 匹配.zip

    wildcard, 在Java中,高效的文件系统 Pattern 匹配 请使用 WildCard讨论组 。通配符是一个小型的... 路径可以与通配符或者 正规表达式 匹配。 匹配的文件可以很容易地复制。删除。压缩等。匹配匹配glob 方法使用原义

    Java2核心技术.part5

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

    数据结构与算法分析 Java语言描述第2版

    Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...

    数据结构与算法分析_Java语言描述(第2版)

    《数据结构与算法分析:Java语言描述(第2版)》是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。...

    数据结构与算法分析-Java语言描述(第2版)_2_2

    java5 1.4.1 使用object表示泛型 1.4.2 基本类型的包装 1.4.3 使用接口类型表示泛型 1.4.4 数组类型的兼容性 1.5 利用java5泛性实现泛型特性成分 1.5.1 简单的泛型类和接口 1.5.2 自动装箱/拆箱....

    数据结构与算法分析-Java语言描述(第2版)_1_2

    java5 1.4.1 使用object表示泛型 1.4.2 基本类型的包装 1.4.3 使用接口类型表示泛型 1.4.4 数组类型的兼容性 1.5 利用java5泛性实现泛型特性成分 1.5.1 简单的泛型类和接口 1.5.2 自动装箱/拆箱....

    Java2核心技术.part3

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...

Global site tag (gtag.js) - Google Analytics