1 public static void main(String[] args){ System.out.println(getUri("/group/v1/{groupId}/query_device_page".toCharArray(),"/group/v1/*/query_device_page".toCharArray())); 2 } 3 4 /** 5 * 通配符验证 strsc 是否包含 strc 6 * @param strc 7 * @param strsc 标准串 8 * @return 9 */ 10 public static boolean getUri(char[] strc, char[] strsc){ 11 int cl = strc.length; 12 int scl = strsc.length; 13 int cli = 0; 14 int i = 0; 15 boolean next = false; // 通配符查找模式 16 boolean prOk = false; // 上一次匹配成功 17 int ni = 0; 18 for (; i < scl; i++) { 19 char n = strsc[i]; 20 char bn = strc[cli]; 21 if (n == '*') { 22 if (!prOk) 23 return false; // 说明 两星号之间的部分判断失败 24 else if (i == scl -1) 25 return true;// 最后一位为 * 号 上一位相等 条件成立 26 ni = i; 27 next = true; 28 prOk = false; 29 continue; // 继续匹配 30 } 31 if (!(prOk = bn == n) && !next) { // 非匹配模式下 条件不成立 32 return false; 33 } 34 if (next && !prOk) { 35 i = ni; // 统配符模式匹配失败 标准串下标原地等待 36 } 37 if (++cli >= cl) 38 return prOk && i + 1 == scl ; // 长度不匹配 39 } 40 return prOk && cli == cl; 41 }
字符串通配符