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

212
22 сентября 2018, 22:00

Есть лог файл в текстовом формате, весом 4gb. Структура файла - это N строк весом примерно 200 байт. Необходимо получать строки (добавлять их в массив), в которых есть ключевое слово. Очень важна скорость получения информации. На данный момент реализовано следующим образом:

public List<String> readFileByFilter(String fileName, String filter) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(fileName));
    ArrayList<String> list = new ArrayList<>();        
    while (reader.ready()) {
        String tmp = reader.readLine();
        if (tmp.matches(".*"+ filter +".*")) {
            list.add(tmp);
        }
    }
    reader.close();
    return list;
}

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

Answer 1

Строка

if (tmp.matches(".*"+ filter +".*")) {

вызываемая в цикле, это уникальнейший провал производительности

  1. На каждой итерации цикла конструируется новая строка
  2. Используется регулярное выражение вместо простого поиска по тексту

Замените эту строку на

if (tmp.contains(filter)) {
READ ALSO
Рандомная выборка кнопок

Рандомная выборка кнопок

Игра "крестики- нулики"Создал 9 кнопок, разместил в массиве, чтобы объявить и раздать id

229
Не работает overflow: hidden

Не работает overflow: hidden

Хай! не работает свойство overflow: hidden в меню примера

250
Как сделать не стандартный css слайдер?

Как сделать не стандартный css слайдер?

Хочу сделать слайдер с radio button, чтобы зеленые слайды вверху перемещались на определенное расстояние влево, за экраном есть еще слайды, и чтобы...

249
Как прикрепить текст к низу с расширением вверх?

Как прикрепить текст к низу с расширением вверх?

Ка сделать чтобы было как на картинке, чтобы в зависимости от высоты 2-ого снизу поля, 3-е снизу меняло свою позицию

224