这就是我想要做的。用户可以输入搜索字符串,其中可以包括“*”或“?” 通配符。我发现这适用于常规字符串,但不适用于包含数字字符的字符串。
例如:414D512052524D2E535441524B2E4E45298B8751202AE908 1208
如果我查找该十六进制字符串的一部分,它会返回 false。如果我在“1208”字符串中查找“120”或“208”,它会失败。
现在,当用户输入时,我的正则表达式模式最终看起来像这样,说 "w?f": '\bw.?f\b'
我(显然)目前并不精通正则表达式,但如果有人可能需要以我需要的方式处理数字字符,我将不胜感激 - 谢谢!
有问题的代码:
/**
*
* @param searchString
* @param strToBeSearched
* @return
*/
public boolean findString(String searchString, String strToBeSearched) {
Pattern pattern = Pattern.compile(wildcardToRegex(searchString));
return pattern.matcher(strToBeSearched).find();
}
private String wildcardToRegex(String wildcard){
StringBuffer s = new StringBuffer(wildcard.length());
s.append("\\b");
for (int i = 0, is = wildcard.length(); i < is; i++) {
char c = wildcard.charAt(i);
switch(c) {
case '*':
s.append(".*");
break;
case '?':
s.append(".?");
break;
default:
s.append(c);
break;
}
}
s.append("\\b");
return(s.toString());
}