我需要检查一个输入字符串,它可以匹配Java中的一个或多个模式..
我尝试使用if - else检查匹配的值..但我有超过100个检查 做这样的if-else也不是好的方法..
同样循环遍历每个字符串并检查输入字符串可能非常密集。
是否有一种简单的方法,其表现也很好。
样本值低于(有近100多种此类模式)
如果我输入IP | VAR | D00 | PB | TM | AB,我应该得到3个模式匹配... 我需要选择每个模式的值......
IP|VAR|** - IPVAR
IP|VAR|D00|* - IPVARD00
IP|VAR|D00|PB|* - IPVARE
IP|ANBT|D00|* - IPVARAD
IK|**|ServiceApp or IK|**|Ser| - IKSER
答案 0 :(得分:0)
你的意思是这样的:
档案:patterns
tucky*
Fried
Chi*
Unix
Apple
Nikon
档案:words
Kentucky Fried Chicken
Nikon
然后像这样搜索:
grep -f patterns words
Kentucky Fried Chicken
Nikon
或-o
grep -o -f patterns words
tucky
Fried
Chi
Nikon
答案 1 :(得分:0)
循环是要走的路:如果你真的需要检查那么多模式,那么除了在循环中尝试它们之外,你无法做很多事情。
如果您的所有模式都以两个固定字母开头,则此处应用一个简单的优化:按前两个字母对所有模式进行分组,然后检查传入字符串的前两个字母,并选择基于的模式组它。例如,如果字符串的前两个字母是'I'
和'P'
,那么您应该仅循环以"IP|"
开头的模式,并跳过剩余的模式。
通过前两个字符组织模式的一种方法是使用Map
:
Map<String,List<MyPattern>> patterns = ...
现在你可以这样做:
List<MyPattern> applicablePatterns = patterns.get(inputString.substring(0, 2));
for (MyPattern p : applicablePatterns) {
// This loop is much shorter
}