java实现匹配通配符,java通配符匹配实现类,java通配符匹配,java通配符匹配的实现..._黄业文的博客-程序员宅基地

技术标签: java实现匹配通配符  

java通配符匹配实现类,java通配符匹配,java通配符匹配的实现

java通配符匹配的实现类,可以计算字符串是否匹配某个通配符,可以计算是否匹配一组通配符中的一个。// Copyright (c) 2003-2009, Jodd Team (jodd.org). All Rights Reserved./** * Checks whether a string matches a given wildcard pattern. * Possible patterns allow to match single characters ('?') or any count of * characters ('*'). Wildcard characters can be escaped (by an '\'). *

* This method uses recursive matching, as in linux or windows. regexp works the same. * This method is very fast, comparing to similar implementations. */public class Wildcard { /** * Checks whether a string matches a given wildcard pattern. * * @param string input string * @param pattern pattern to match * @return true if string matches the pattern, otherwise false */ public static boolean match(String string, String pattern) { return match(string, pattern, 0, 0); } /** * Checks if two strings are equals or if they {@link #match(String, String)}. * Useful for cases when matching a lot of equal strings and speed is important. */ public static boolean equalsOrMatch(String string, String pattern) { if (string.equals(pattern) == true) { return true; } return match(string, pattern, 0, 0); } /** * Internal matching recursive function. */ private static boolean match(String string, String pattern, int stringStartNdx, int patternStartNdx) { int pNdx = patternStartNdx; int sNdx = stringStartNdx; int pLen = pattern.length(); if (pLen == 1) { if (pattern.charAt(0) == '*') { // speed-up return true; } } int sLen = string.length(); boolean nextIsNotWildcard = false; while (true) { // check if end of string and/or pattern occurred if ((sNdx >= sLen) == true) { // end of string still may have pending '*' in pattern while ((pNdx < pLen) && (pattern.charAt(pNdx) == '*')) { pNdx++; } return pNdx >= pLen; } if (pNdx >= pLen) { // end of pattern, but not end of the string return false; } char p = pattern.charAt(pNdx); // pattern char // perform logic if (nextIsNotWildcard == false) { if (p == '\\') { pNdx++; nextIsNotWildcard = true; continue; } if (p == '?') { sNdx++; pNdx++; continue; } if (p == '*') { char pnext = 0; // next pattern char if (pNdx + 1 < pLen) { pnext = pattern.charAt(pNdx + 1); } if (pnext == '*') { // double '*' have the same effect as one '*' pNdx++; continue; } int i; pNdx++; // find recursively if there is any substring from the end of the // line that matches the rest of the pattern !!! for (i = string.length(); i >= sNdx; i--) { if (match(string, pattern, i, pNdx) == true) { return true; } } return false; } } else { nextIsNotWildcard = false; } // check if pattern char and string char are equals if (p != string.charAt(sNdx)) { return false; } // everything matches for now, continue sNdx++; pNdx++; } } // ---------------------------------------------------------------- utilities /** * Matches string to at least one pattern. * Returns index of matched pattern, or -1 otherwise. * @see #match(String, String) */ public static int matchOne(String src, String[] patterns) { for (int i = 0; i < patterns.length; i++) { if (match(src, patterns[i]) == true) { return i; } } return -1; }}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30177835/article/details/115668605

智能推荐

loadrunner监控linux性能指标,loadrunner监控常用性能指标(windows、Linux、Oracle)_weixin_39524984的博客-程序员宅基地

网上整理的资料,主要包括windows、Linux、Oracle数据库性能指标一、windows常见计数器Memory:Available Mbytes:可用物理内存数. 如果Available Mbytes的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。page/sec: 表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面...

java通过key获取txt的value_java 读取properties属性文件获取key或者value_平老虎的博客-程序员宅基地

package com.farben.util;import java.io.IOException;import java.io.InputStream;import java.util.NoSuchElementException;import java.util.Properties;import org.apache.commons.io.IOUtils;import org.slf4j....

java上传音频的方法_将音频文件从文档目录上传到 iCloud_悦橦的博客-程序员宅基地

我正在尝试使用以下代码将文档目录中的 session1.mp3 等音频文件上传到 iCloudNSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0];N...

基于C的Speex 音频编解码_weixin_33682790的博客-程序员宅基地

view plaincopy to clipboardprint?// demo.cpp : Defines the entry point for the console application.   //   #include &quot;stdafx.h&quot;   #include &amp;lt;speex/speex.h&amp;gt;   #include &amp;lt;stdio.h&amp;gt;    #include &amp;...

spring-boot自动部署的两种方式_粗心的小码农的博客-程序员宅基地_springboot自动部署

1,第一种方式pom文件中添加以下依赖dependency> groupId>org.springframework.bootgroupId> artifactId>spring-boot-devtoolsartifactId> optional>trueoptional>dependency>build> plugins> plugin>

网络病毒 计算机安全的目的,电脑病毒的目的_幸运小姐的博客-程序员宅基地

电脑病毒有很多危害,它的目的也正是要破坏我们的电脑,下面是学习啦小编为你整理相关的内容,希望大家喜欢!电脑病毒的目的1、自从美国学生弗里德-科恩以测试计算机安全为目的编写首个电脑病毒以来,全球电脑 病毒到本周迎来了二五周岁的“生日”,目前世界上约有6万多种电脑病毒,它们已经从最初给用户带来小麻烦发展到严重威胁电脑和网络的安全。 病毒写手已经开始利用最新的技术,而且病毒也开始通过网络进行更加快速的传...

随便推点

WPF 鼠标事件识别不了,点不动(偶尔会触发鼠标事件)_波雅_汉库克的博客-程序员宅基地

背景:今天遇到一个怪事,我在WPF中的矩形框中添加了一个鼠标右击触发事件,但是右击过后并没有触发,十分生气胡乱的右击偶尔会触发。非常不解,后来看帖子找到灵感,原来是我的矩形没有填充,后来把矩形背景填充成透明万事大吉。上代码:var X = (GrigHeight + GridBorder) * i + GridBorder;var Y = j * (GrigHeight + GridBorder) + GridBorder;Rectangle MapGrid = new Rectangle()

go快速入门并发-channel_图图是只猫的博客-程序员宅基地

概述用简单的示例解决go并发与普通单线程的区别:1000个请求进来:go的并发解决速度go的单线程解决速度两者比较即可了解go并发的魅力channel的简单使用定义通道var c = make(chan int)定义通道的接收方func worker(i chan int) { fmt.Println(&lt;-i)}go worker(c)通道的使用:接收方 发送值c &lt;- 1注意向通道发值的时候必须先定义通道的接收方并发比较用循环模拟1000请求

C语言经典100道例题-求输入一个数,从1-n输入的数里面共有几个9_许多逗的博客-程序员宅基地

C语言经典100道立体-求输入一个数,从1-n输入的数里面共有几个9由于代码注释量较少,有问题可以私信给我运行结果

09_java基础——this_aimishu7326的博客-程序员宅基地

多次调用同一个对象的某个方法:package com.huawei.test.java04;/** * This is Description * * @author 王明飞 * @date 2018/08/29 */public class This { private int i=0; This increament()...

java 视频转化为h264_linux下java使用ffmpeg将MP4视频转为H264编码_冼辉的博客-程序员宅基地

linux下java使用ffmpeg将MP4视频转为H264编码package com.blue.common.util;import java.io.*;public class MediocreExecJavac {public static boolean transfer(String infile,String outfile) {String avitoflv = "ffmpeg -i...

oracle+逗号分隔+条数,在Oracle SQL中计算逗号分隔的所有列的值_六氟合铝酸钠的博客-程序员宅基地

寻找单个列计数很简单,但是这似乎很难,如果不是不可能的。所以你不要手动查找每一列?你想要它动态。设计实际上有缺陷,因为它违反了标准化。但是如果您愿意继续使用它,那么您可以使用REGEXP_COUNT以PL/SQL的方式执行此操作。喜欢的东西,SQL&gt; CREATE TABLE t AS2 SELECT '1,2,3' Col1,3 '2,3,4,5,1' Col2,4 '5,6' Col35...

推荐文章

热门文章

相关标签