прямо сейчас я использую приведенный ниже код, чтобы найти ключевые слова в содержимом файла < /p>
Код: Выделить всё
public static void main(String[] args) {
StringBuilder fileContent = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\harshita.sethi\\Desktop\\merge\\MNT.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
fileContent.append(line).append("\n");
}
}
String content = fileContent.toString();
Set[*]> keywords = getDbQuery(); // size can be up to 4*10^5
for (List key : keywords) {
if (checkOccurence(content, key.get(0))) {
//Do Somethng
}
}
}
private static boolean checkOccurence(String content, String keyword) {
Boolean flag = false;
try {
Pattern p = Pattern.compile("\\b" + keyword + "\\b", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(content);
flag = m.find();
} catch (PatternSyntaxException ex) {
System.out.println("cannot report occrence of " + keyword);
}
return flag;
}
< /code>
Проблема заключается в огромном размере файла. Для сканирования файла требуется много времени. Я прошел все виды тестирования и пришел к выводу, что Pattern.compile делает прогресс кода медленным.
Я читал в Интернете, поскольку Pattern.compile собирает повторную экспозицию каждый раз, когда функция называется много времени. Ограничено использовать версию Java 6. < /p>
edit -< /strong> < /p>
Я попробовал все ключевые слова перед циклами, как предложено несколько человек. Я вижу, что в времени выполнения кода нет большой разницы. Потребовалось всего несколько секунд, чтобы завершить полный пробег, где он занимал 8-10 минут раньше. Но путем удаления граничного режима Вопрос -< /strong> есть ли способ точно настроить производительность, используя границы. Почему производительность резко изменилась? < /p>
Моя цель (например) - получить < /p>
- Если ABCD найдено при поиске ABC и
Код: Выделить всё
false - Если ABC. или abc, или abc и т. Д. При поиске ABC .
Код: Выделить всё
true
Подробнее здесь: https://stackoverflow.com/questions/433 ... arge-files