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; }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值