Страницы

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

вторник, 31 декабря 2019 г.

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

#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;
}


Подскажите, есть ли возможность сделать производительней (быстрей) данный участок кода? 
    


Ответы

Ответ 1



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

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

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