Java中的字符串搜索算法
我正在用大量数据进行字符串匹配 编辑:我正在将一个大列表中包含的单词与一些本体文本文件进行匹配。我从本体中获取每个文件,并搜索每个文件行的第三个字符串与列表中的任何单词之间的匹配 我犯了一个错误:我需要做的不是纯粹的匹配(结果很差),但我需要一些更松散的匹配函数,当字符串包含在另一个字符串中时,该函数也将返回结果 我做这件事的时候带着;这是非常快,工作很好,但现在我想我的工作是无用的,因为trie只返回精确匹配/Java中的字符串搜索算法,java,algorithm,matching,string-matching,string-search,Java,Algorithm,Matching,String Matching,String Search,我正在用大量数据进行字符串匹配 编辑:我正在将一个大列表中包含的单词与一些本体文本文件进行匹配。我从本体中获取每个文件,并搜索每个文件行的第三个字符串与列表中的任何单词之间的匹配 我犯了一个错误:我需要做的不是纯粹的匹配(结果很差),但我需要一些更松散的匹配函数,当字符串包含在另一个字符串中时,该函数也将返回结果 我做这件事的时候带着;这是非常快,工作很好,但现在我想我的工作是无用的,因为trie只返回精确匹配/ 执行此操作的算法类型是字符串搜索算法 有人能推荐一些他有经验的Java实现吗
- 执行此操作的算法类型是字符串搜索算法
- 有人能推荐一些他有经验的Java实现吗李>
谢谢大家! 我不完全确定我是否正确理解了这个问题,但听起来正则表达式可以解决这个问题
正则表达式绝对是您的最佳选择。它们的编写可能有点混乱,但它们是唯一一种可以进行更松散匹配的方法,而不需要一系列令人费解的if/else或switch语句 另外,它们会比替代品快得多。您可能会发现它们很有用(它们在概念上与尝试类似) 对于每个字符串,您可以以“^”开头,以“$”结尾,并创建所有附加字符串的后缀树。空间使用率将为O(n),并且可能比trie的情况更糟 如果您现在需要搜索字符串s,您可以在O(| s |)时间内轻松完成,就像trie一样,您得到的匹配将是子字符串匹配(基本上,您将匹配某个字符串的某个后缀) 对不起,我手头没有Java实现的参考资料 找到了一个有用的答案: 其中: 这反过来又有:源代码:您可以在文本文件中搜索单个模式,并对列表中的所有模式重复此算法
另一个最好的解决方案是使用多模式搜索算法,比如:为什么不在java中使用indexOf方法呢。根据内存可用性,阅读内容。做一个索引,得到你需要的所有行。加载下一组内容 如果从文件中读取,请使用nio流 也许这个想法不好,但我相信java。它将使用最好的算法
使用正则表达式更好。-1:为什么正则表达式是“最好的”?为什么选择if/else开关语句?在选择替代方案之前,你考虑过哪些其他选择?我想说regex的性能会很差!你必须编译它们,然后在匹配过程中可能进行回溯等等……好吧,问题最初的措辞(预编辑),这就是我阅读它的方式——显然,它不再适用了@白痴:我想这可能正是我所需要的,如果我理解得很好,我可以用同一棵树进行“匹配”和“包含”。@Julia:是的。如果要精确匹配,请在搜索字符串前加上“^”,再加上“$”并进行匹配。如果您想要包含,请按原样使用搜索字符串。@Moron:这似乎很完美。一定有一些java库@朱莉娅:看看我给这个答案添加的链接。什么是“做这件事的算法类型是字符串搜索算法?”问?您说在文本文件中搜索,但我不需要匹配文本文件中的任何位置,而是每行的第三个字符串,可以指定吗?(对于细节,我感到很抱歉,因为我匆忙地使用了基数trie)BM算法匹配任何字符串,而不考虑字符串的来源(来自文件中的文本,来自数据库中的单元格…等等)。