我尝试使用一些算法(k-gram算法等)在我的应用程序中实现通配符搜索,但它非常复杂。
直到我找到这个代码,它才能完美运行..但我不知道如何检查并获得结果!
代码:
public static boolean wildCardMatch(String text, String pattern)
{
return text.matches( pattern.replace("?", ".?").replace("*", ".*?") );
}
他们是否有人帮助我知道它是如何工作的?替换功能的想法是什么?
答案 0 :(得分:3)
您所说的内容称为 glob pattern 。
在Java世界中,glob模式经常被翻译成正则表达式模式。
在您的方案中,实现非常基础:replace
方法用于将所有出现的?
替换为正则表达式等效.?
。然后*
的所有出现都被.*?
替换。
因此,如果您有以下全局模式:abc*.def
,则正则表达式将变为abc.*?.def
。
当正则表达式最终准备就绪时,使用方法text
对变量matches
进行检查。后一种方法接受正则表达式作为输入。
答案 1 :(得分:1)
您使用的方法是String.replace(CharSequence target, CharSequence replacement)
。
实现CharBuffer
接口作为参数需要两个对象,可能是以下之一:
Segment
String
StringBuffer
StringBuilder
CharSequence
并用CharSequence
中的第二个String
替换第一个pattern
的每个出现。
在您的情况下,如果**??
参数包含text.matches
,.?.?.*?.*?
方法将获得text
作为输入,那就是true
{1}}参数也必须包含(根据regular expressions),以便成功匹配它们以及返回private LongProperty score = new SimpleLongProperty(0);
的方法。
澄清: