如何有效地搜索字符串

时间:2011-05-18 11:47:18

标签: java string search text

我的文字大约有300到500字。此外,我有大约200k关键字,我想知道每个关键字是否包含在文本中。一个String包含的is​​t很慢,有没有办法预处理String?

我想过使用SuffixTree,但我不确定这是最好的选择。

此外,这项任务有没有好的图书馆?例如,semanticdiscoverytoolkit有一个后缀树实现,但是在添加字符串后,我无法弄清楚如果字符串包含在树中,如何查找。

问候,

尼科

2 个答案:

答案 0 :(得分:2)

你可以试试rabin-karp字符串搜索算法。因为你主要进行散列(整数)比较,所以性能比字符串比较要好得多。

  1. 计算关键字
  2. 的哈希值
  3. 计算文本的滚动哈希值
  4. 比较这两个哈希值。如果匹配,则执行实际的字符串比较。
  5. 将位置提前1个字符,然后从步骤2开始重复,直至到达文本末尾。
  6. 作为类比,滚动哈希就像一个沿着文本滚动的“滑动窗口”。哈希比较是使用“滑动窗口”中子字符串的哈希对照关键字的哈希来完成的。

答案 1 :(得分:0)

您可以使用StringTokenizer获取每个单词,然后填充您之后检查的hashmap。这需要仅通过每个列表一次。因此,查找时间应非常快,这对于您拥有的关键字数量非常重要。

将这种方法与Lucene这样的方法进行分析可能是值得的。