这就是我想要做的。用户可以输入搜索字符串,其中可以包含“*”或“?”通配符。我发现这适用于常规字符串,但不包括数字字符。
e.g: 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());
}
答案 0 :(得分:0)
让我们假设您要搜索的字符串是
1208
用户输入的搜索“术语”是
120
那么模式是
\b120\b
\b
(字边界)元字符匹配“字”的开头和结束。
在我们的示例中,这不起作用,因为120
!= 1208
模式必须是
\b.*120.*\b
其中.*
表示match a variable number of characters (including null)
。
<强>解决方案:强>
.*
添加到您的wildcardToRegex(...)
方法中,以使此功能开箱即用,*120*
,因为您的*
通配符完全相同。something*
),包括某些内容(*something*
),以某些内容结尾({{1} }),或者恰好是某种东西(*something
)。