in common/src/main/java/flex/messaging/util/StringUtils.java [64:134]
public static boolean findMatchWithWildcard(char[] src, char[] pat) {
if (src == null || pat == null)
return false;
// we consider an empty pattern to be a don't-match-anything pattern
if (pat.length == 0)
return false;
if (src.length == 0)
return (pat.length == 0 || (pat.length == 1 && (pat[0] == '*' || pat[0] == '?')));
boolean star = false;
int srcLen = src.length;
int patLen = pat.length;
int srcIdx = 0;
int patIdx = 0;
for (; srcIdx < srcLen; srcIdx++) {
if (patIdx == patLen) {
if (patLen < (srcLen - srcIdx))
patIdx = 0; //Start the search again
else
return false;
}
char s = src[srcIdx];
char m = pat[patIdx];
switch (m) {
case '*':
// star on the end
if (patIdx == pat.length - 1)
return true;
star = true;
++patIdx;
break;
case '?':
++patIdx;
break;
default:
if (s != m) {
if (!star) {
if (patLen < (srcLen - srcIdx))
patIdx = 0; //Start the search again
else
return false;
}
} else {
star = false;
++patIdx;
}
break;
}
}
if (patIdx < patLen) {
//read off the rest of the pattern and make sure it's all wildcard
for (; patIdx < patLen; patLen++) {
if (pat[patIdx] != '*') {
return false;
}
}
return true;
}
return !star;
}