Поиск строки в текстовом файле с запоминанием позиции

102
29 июня 2019, 22:10

Имеется текстовый файл и строка, которую нужно найти в файле. Подскажите, каким способом в Java можно запомнить позицию, например, номер символа, начиная с которого в тексте идут совпадения с искомой строкой? В тексте таких совпадений может быть несколько, следовательно необходимо запомнить все номера символов, начиная с которых в текстовом файле идет совпадение по искомой строке.

Например, если использовать метод findInLine(String) класса Scanner, то он только делает проверку на наличие строки в тексте, а не возвращает номер символа. Можно конечно в цикле пройтись по всему текстовому файлу, считывая посимвольно, но это не эффективно

Answer 1

С помощью RandomAccessFile можно построчно перебирать файл и получать для каждой строки величину сдвига относительно начала файла.

    RandomAccessFile raf = new RandomAccessFile(path, "r");
    long seek = 0;
    while (true) {
        String s = raf.readLine();
        System.out.printf("seek %d;  string %s\n", seek, s);
        seek += s.getBytes().length;
        if (seek > raf.length()) break;
    }

Прочитать в последствии нужную строку можно будет подставив необходимое значение seek.

READ ALSO
RuntimeException: Unable to resume activity

RuntimeException: Unable to resume activity

Проблема в том, что в onPause вы ставите camera = null;, а потом в onResume пытаетесь открыть camera = Cameraopen(); Естественно, оно падает

120
Полиморфизм Java

Полиморфизм Java

Когда я переопределяю метод из базового класса с помощью @Override - это статическое связывание, а когда без - динамическоеПравильно ли я понимаю?

143
как сплитить list по ключевому символу

как сплитить list по ключевому символу

У меня есть файл, в котором лежит строка, где каждое значение разделено пробелом, мне надо разделить каждое значение через пробелВ файле строка...

117
JS чтение файла

JS чтение файла

У меня есть небольшое web-приложение с использованием JSОна лежит локально и должно точно так же использоваться локально

116