Страницы

Поиск по вопросам

четверг, 20 декабря 2018 г.

Java поиск строк в файле по ключевому слову

Есть лог файл в текстовом формате, весом 4gb. Структура файла - это N строк весом примерно 200 байт. Необходимо получать строки (добавлять их в массив), в которых есть ключевое слово. Очень важна скорость получения информации. На данный момент реализовано следующим образом:
public List readFileByFilter(String fileName, String filter) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(fileName)); ArrayList list = new ArrayList<>(); while (reader.ready()) { String tmp = reader.readLine(); if (tmp.matches(".*"+ filter +".*")) { list.add(tmp); } } reader.close(); return list; }
Подскажите, есть ли возможность сделать производительней (быстрей) данный участок кода?


Ответ

Строка
if (tmp.matches(".*"+ filter +".*")) {
вызываемая в цикле, это уникальнейший провал производительности
На каждой итерации цикла конструируется новая строка Используется регулярное выражение вместо простого поиска по тексту
Замените эту строку на
if (tmp.contains(filter)) {

Комментариев нет:

Отправить комментарий