我想定义一个由值组成的黑名单过滤器。让他们按照这个顺序。a, b, c
为了快速查找,我想将它们连接成一个,这样我就可以快速查找。这通常工作正常。Set<String>blacklist.contains(a+b+c)
问题:黑名单定义中的 3 个参数中除一个参数外的任何一个都可能被 wildcarted。因此,黑名单可能包含:*
OneTwoThree
*bc
因此,该方法调用 。旁注:方法输入参数当然可能不是通配符,而只是普通的字符串词。isBlacklisted("One", "b", "c") = true
问题是:我怎样才能更好地编写查找,如下所示?
private Set<String> blacklist; //concatenation of 3 fields 'a+b+c'
private boolean isBlacklisted(String a, String b, String c) {
return blacklist.contains(a+b+c)
|| blacklist.contains("*"+b+c)
|| blacklist.contains(a+"*"+c)
|| blacklist.contains(a+b+"*")
|| blacklist.contains("**"+c)
|| blacklist.contains(a+"**")
|| blacklist.contains("*"+b+"*");
}
如何创建支持通配符的快速筛选器,而不必像我一样检查所有可能的串联通配符?
慕桂英546537
当年话下
繁华开满天机
相关分类