我必须在多个大型xml文件(近20000个文件)中搜索其中包含近200000个名称的名称列表-一个名称可能具有多个单词,花括号,引号等)[例如:皇家企业(合并) ]。如果每个文件中的200000个名称完全匹配,则需要从中查找。
我可以在每个文件中循环使用名称,并使用String.contains()搜索。这种搜索速度更快,但结果不准确,因为它将搜索部分单词。
例如:“ concatenation” .contains(“ cat”)为true
但预期结果为“ false”,因为“ cat”不完全匹配
例如,当我在文件中搜索这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;
}
从文件中搜索完全匹配时,我需要更好的性能。