在Java中搜索子字符串

时间:2012-03-27 11:47:39

标签: java file search text substring

我要做的是如下:我有一个名称列表(大约40,000)将保持不变,一个文本文件(大约10000行)将从搜索更改为搜索。我需要找到一种合适的方法来搜索文本文件中的每一行,以查看名称和文本之间是否存在精确的字符串匹配,然后返回匹配项和出现次数(参见下文)。我已经用嵌套的'for循环'实现了这个,这很可能是非常慢的。我相信其他人已经找到了同样的问题,如果这个问题是重复的,我会道歉,但是,我已经大量搜索了一个合适的答案,但到目前为止还没有成功。我很感激可以提供任何帮助(首选Java)。另请注意,任何可以加速此搜索的结构对我都有好处(不一定是最好的)。真诚的感谢您的帮助。

示例:

names.txt(静态) 安迪迪克 安德鲁坎宁安 。 。 。 艾萨克·P·牛顿 。 。 。 祖鲁

text.txt(动态) 这是随机文本,可能包含也可能不包含任何名称,如Isaac P. Newton或Zulu。这里有更多的线......另一个祖鲁......

我需要返回以下内容: 艾萨克P.牛顿1 祖鲁2

2 个答案:

答案 0 :(得分:0)

您可以使用Java中的HashMap,将names.txt中的所有名称加载到HashMap,然后在其中搜索。它应该会提高你的表现。这是一些示例代码。

       HashMap<String, Integer> textNames = new HashMap<String, Integer>();
       for (String name : nameFile) {
           textNames.put(name, 0);
       }

       for (String line : textFile) {
           if (textNames.containsKey(line)) {
               textNames.put(line, textNames.get(line)+1);
           }
       }

- V

答案 1 :(得分:0)

我建议用40,000个名字构建一个有限自动机。在Java中,您可以通过利用正则表达式来完成此操作。通过将每个名称与“|”连接来构造正则表达式符号。编译模式并将每个输入行与其匹配。