【发布时间】:2013-08-22 19:15:03
【问题描述】:
我需要实现一种使用 Java 在字符串列表 (haystack) 中搜索子字符串 (needles) 的方法。
更具体地说,我的应用有一个用户个人资料列表。如果我输入一些字母,例如“Ja”,然后搜索,那么名称中包含“ja”的所有用户都应该显示出来。例如,结果可能是“Jack”、“Jackson”、“Jason”、“Dijafu”。
据我所知,在 Java 中,有 3 种内置方法可以查看字符串中的搜索子字符串。
string.contains()
string.indexOf()
正则表达式。它类似于 string.matches("ja"))
我的问题是:上述每个方法的运行时间是多少?哪一种是检查字符串列表是否包含给定子字符串的最快、最有效或最流行的方法。
我知道存在一些做同样事情的算法,例如 Boyer–Moore 字符串搜索算法、Knuth–Morris–Pratt 算法等等。我不想使用它们,因为我只有一小部分字符串,而且我认为现在使用它们对我来说有点矫枉过正。此外,我必须为这种非内置算法输入大量额外的编码。 如果您认为我的想法不正确,请随时纠正我。
【问题讨论】:
-
为什么认为子串搜索是性能问题?
-
自己设置一些简单的性能测试应该不会太复杂!
-
您可能还想研究一下特里:en.wikipedia.org/wiki/Trie
标签: java regex search substring search-engine