* 表示匹配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 通过通配符查找文件 例如:*.*, *.java, a*.*, a*.java
Java使用路径通配符加载Resource与profiles配置使用详解 本文主要介绍了Java使用路径通配符加载Resource与profiles配置使用详解。通过示例代码,详细介绍了Java使用路径通配符加载Resource与profiles配置的使用方法...
在本文中,我们将深入探讨如何使用Java来实现CoAP(Constrained Application Protocol)协议,这是一种专为物联网(IoT)设备设计的轻量级通信协议。CoAP与HTTP类似,但更加适合资源有限的设备。我们将关注服务器端...
- **主题交换器:** 支持通配符(# 和 *)来进行模式匹配,允许更灵活的消息分发方式。 - **使用方法:** 定义主题模式(如`stock.#`),并根据该模式将消息路由到相应的队列。 **11. RabbitMQ支持哪些高级消息模式...
Java学习路径三篇 在Java编程领域,学习之路并非一蹴而就,它需要系统性的规划和持续的努力。本资源集合“新手必读”旨在为初学者提供一条清晰的学习路径,帮助他们逐步掌握Java的核心概念和技术。下面我们将深入...
- **通配符**:`*`可以匹配任意文件名,`*.java`匹配所有.java扩展名的文件。 #### 四、Java命令 1. **javac**:Java编译器,用于将`.java`源文件编译成`.class`字节码文件。 2. **java**:Java解释器,用于运行`....
- **泛型通配符**:通配符的定义、种类及其实例应用。 #### 9. Lambda表达式 - **Lambda表达式的概念**:Lambda表达式的定义、语法格式及其实现原理。 - **函数式接口**:函数式接口的定义及其与Lambda表达式的联系...
本课程“Java从入门到深入”旨在为初学者提供全面且系统的Java学习路径,适合对Java有浓厚兴趣并立志深入研究的爱好者。 1. **Java基础知识** - **环境配置**:首先,学习Java需要安装Java Development Kit (JDK)...
- **通配符**:? 表示任意类型,? extends T 表示某种特定类型的子类型,? super T 表示某种特定类型的超类型。 #### 9. Lambda表达式 - **简介**:Java 8引入的新特性,简化了函数式接口的实现。 - **使用场景**:...
- **通配符**:使用`?`表示未知类型。 **2.2 Lambda表达式** - **语法**:`(参数列表) -> {表达式;}`。 - **应用场景**:简化函数式接口的实现,提高代码可读性和简洁性。 **2.3 Stream API** - **流的创建**:`...
- 理解面向对象的概念和Java如何实现这些概念。 - 掌握基本语法,如变量、数据类型、控制结构等。 - 练习编写代码,理论结合实践。 8. **Java语法格式** - Java代码遵循严格的语法规则,如每个语句末尾必须以...
3. **XPath 通配符**: - `*`:匹配任何元素节点。 - `@*`:匹配任何属性节点。 - `node()`:匹配任何类型的节点。 4. **选取多个路径**: - 使用 `|` 运算符合并多个路径表达式的节点集。 #### 五、XPath ...
Java泛型允许在定义类、接口和方法时指定类型参数,以实现类型安全和代码重用。类型擦除是指在编译期间,泛型信息会被删除,以保持与早期版本的Java兼容。常用的通配符包括<?>、extends T和super T。 **1.3 基本...
- **通配符** - 通配符的使用:?表示任意类型。 - 限定通配符:? extends T、? super T。 - **泛型的其他应用** - 泛型类与泛型方法:使用泛型增强类和方法的功能。 - 泛型擦除:编译后泛型信息会被擦除。 - **...
- **通配符**:?,上限通配符<? extends T>,下限通配符<? super T>。 12. **枚举与注解**: - **枚举类型**:Java中的枚举可以包含方法和常量,常用于定义固定值。 - **注解**:元数据,用于提供编译器或运行时...
泛域名解析是指利用通配符 \* (星号)来做次级域名,以实现所有的次级域名均指向同一 IP 地址。例如支付宝的域名是 www.alipay.com,域名下面有帮助中心 help.alipay.com、abc.alipay.com 等等子站点。有实力的公司...
- **定义**: `CLASSPATH`环境变量用于指定Java虚拟机(JVM)加载类文件(class files)的路径。 - **作用**: JVM在运行时会根据`CLASSPATH`中指定的路径查找并加载所需的类文件。 - **示例**: `CLASSPATH ;C:/java/...
- 线程是进程内的独立执行路径。 2. **创建线程方式** - 通过继承`Thread`类。 - 实现`Runnable`接口。 3. **两种进程创建方式比较** - 继承`Thread`类更简单。 - 实现`Runnable`接口更灵活。 4. **线程的...