有什么方法可以提高使用Java进行大文件搜索的性能?

时间:2019-11-09 11:26:14

标签: java regex string algorithm file

我必须在多个大型xml文件(近20000个文件)中搜索其中包含近200000个名称的名称列表-一个名称可能具有多个单词,花括号,引号等)[例如:皇家企业(合并) ]。如果每个文件中的200000个名称完全匹配,则需要从中查找。

  1. 我可以在每个文件中循环使用名称,并使用String.contains()搜索。这种搜索速度更快,但结果不准确,因为它将搜索部分单词。

    例如:“ concatenation” .contains(“ cat”)为true

但预期结果为“ false”,因为“ cat”不完全匹配

  1. 我可以使用正则表达式。结果是准确的,但是性能很差。

例如,当我在文件中搜索这200000个名称时,

 i) using String.contains()  takes --> 5 sec
 ii) using regex takes --> 340 sec



public Set<String> isContainExactWords(Map<Integer, String> name, String searchFile) {
    /*
     * xml has been parsed and passing CDATA as String
     */
    Set<String> sNamesFound = new TreeSet<String>();

    for (int count = 1; count <= name.size(); count++) {
        String pattern = "(?<!\\S)" + Pattern.quote(name.get(count)) + "(?!\\S)";

        Pattern p = Pattern.compile(pattern);
         if(p.matcher(searchFile).find()== true) {
             sNamesFound.add(name.get(count));
         }
    }
    return sNamesFound;
}
  1. 这些文件是lagre xml文件,其中大多数是200 KB,大约有20000个文件。
  2. 搜索项有200000个元素。

从文件中搜索完全匹配时,我需要更好的性能。

0 个答案:

没有答案