刚写的 经过简单测试 不知道是否完善, 分享一下 也许用的到 欢迎大家填坑
public static void main(String[] args) {
/* System.out.println(getBeanNameByTableName("tab_name"));
System.out.println(getBeanNameByTableName("core_pr_coupon_user"));*/
System.out.println(getUri("/a/test/a/".toCharArray(), "/a/test/*".toCharArray()));
System.out.println(getUri("/b/test/a/".toCharArray(), "/a/test/*".toCharArray()));
System.out.println(getUri("/a/test/a/".toCharArray(), "/*/test/*/".toCharArray()));
System.out.println(getUri("/a/test/a".toCharArray(), "/*/test/*/".toCharArray()));
System.out.println(getUri("/a/asdf/a".toCharArray(), "/a/*/a".toCharArray()));
}
/**
* 通配符验证 strsc 是否包含 strc
* @param strc
* @param strsc 标准串
* @return
*/
public static boolean getUri(char[] strc, char[] strsc){
int cl = strc.length;
int scl = strsc.length;
int cli = 0;
int i = 0;
boolean next = false; // 通配符查找模式
boolean prOk = false; // 上一次匹配成功
int ni = 0;
for (; i < scl; i++) {
char n = strsc[i];
char bn = strc[cli];
if (n == '*') {
if (!prOk)
return false; // 说明 两星号之间的部分判断失败
else if (i == scl -1)
return true;// 最后一位为 * 号 上一位相等 条件成立
ni = i;
next = true;
prOk = false;
continue; // 继续匹配
}
if (!(prOk = bn == n) && !next) { // 非匹配模式下 条件不成立
return false;
}
if (next && !prOk) {
i = ni; // 统配符模式匹配失败 标准串下标原地等待
}
if (++cli >= cl)
return prOk && i + 1 == scl ; // 长度不匹配
}
return prOk && cli == cl;
}