高效的Java复杂模式字符串搜索

高效的Java复杂模式字符串搜索,java,string,algorithm,search,Java,String,Algorithm,Search,我有大约500-1000个实体,每个实体都有名称和字符串内容。要找到这些实体的连接方式,必须搜索每个内容字段中的每个名称。可以编辑实体,因此我可能必须通过在所有内容字段中再次搜索已编辑实体的名称来为其重建连接 精确字符串匹配(.indexOf或.contains)不是选项,因为还有其他规则: 名称可以由多个单词和预定义的特殊字符(u、/、-、)组成,, …) 名称可能被特殊字符包围,并且仍将被识别 名称可以以预定义的复数结尾(s、E、…)结尾,并且仍然可以识别 示例名称: 优质苹果汁,苹果,

我有大约500-1000个实体,每个实体都有名称和字符串内容。要找到这些实体的连接方式,必须搜索每个内容字段中的每个名称。可以编辑实体,因此我可能必须通过在所有内容字段中再次搜索已编辑实体的名称来为其重建连接

精确字符串匹配(.indexOf或.contains)不是选项,因为还有其他规则:

  • 名称可以由多个单词和预定义的特殊字符(u、/、-、)组成,, …)
  • 名称可能被特殊字符包围,并且仍将被识别
  • 名称可以以预定义的复数结尾(s、E、…)结尾,并且仍然可以识别
示例名称: 优质苹果汁,苹果,应用程序,\n,n

示例内容: 应用程序就像精致的苹果汁

匹配所有示例名称

编辑:规则2的澄清:匹配不能是类似“appxxy”或其他乱七八糟的单词,而是用空格(或特殊字符)分隔

我研究了各种可能的解决方案,例如,使用、或使用自定义的。
但是,由于我在编程方面经验不足,在选择最适合我的目的和性能最好的方法时,我会不知所措。

对于500-1000个条目,我会选择一个regexp。这是实体的数量是的。我希望您知道,要找到1000个实体的所有连接,我必须搜索1000*1000个内容字段,每个字段最多有1000个字符。根据您描述的语法规则,我建议您最好选择Aho Corasick。虽然第一次构建这个结构很繁重,但更新速度相当快。也就是说,这取决于您的环境中的实现。测试是无法替代的。@BobDalgleish:这是线性时间,它能获得多少getter?oO@BobDalgleish:我查看了维基百科上给出的两个Aho Corasick实现。我找不到一种方法来定制我的任何规则。你能举例说明如何找到一个名字“app”,后面跟一个允许的复数结尾(“apps”),但不得到一个不允许的复数结尾(“appxxy”)的结果吗?我还对原来的问题做了一些修改