Как использовать регулярные выражения для анализа файла в Java? - PullRequest
1 голос
/ 10 февраля 2011

Я пытаюсь использовать серию регулярных выражений для разбора токенов из файла.Мне нужно считать новые строки и иметь возможность разделять токены, между которыми нет пробелов.К сожалению, метод java.util.Scanner findWithinHorizon () ищет СТАРТ совпадения регулярного выражения во всей оставшейся части входного потока (до горизонта), но я хочу сопоставить регулярное выражение, начиная с текущей позиции файла.В частности, у меня есть куча регулярных выражений, и я хочу просмотреть их, чтобы увидеть, какой из них совпадает, начиная с позиции текущая в файле, а затем переместить позицию файла сразу после соответствия регулярному выражению и продолжить.Возможно ли это?

Метод сканера next () кажется бесполезным для этого, поскольку он применяет разделители, а регулярное выражение должно соответствовать всему токену;Я хочу сопоставить с текущей позиции файла, получить совпавшую строку и выполнить поиск файла после сопоставления.

1 Ответ

0 голосов
/ 10 февраля 2011

Параметры:

  1. Считать весь файл в память в виде строки. Затем используйте Matcher прямо в нужных вам позициях.

  2. Используйте FileChannel, полученный от RandomAccessFile, в качестве ввода для Scanner. Затем вы можете напрямую управлять положением канала.

  3. Используйте FileChannel, как указано выше, но используйте Matcher напрямую для большей гибкости.

Пример использования Matcher с RandomAccessFile:

FileChannel fc = file.getChannel();
fc.lock(); // so it doesn't change under you

ByteBuffer bb = ByteBuffer.allocate(BUFFER_SIZE);
CharBuffer cb = bb.asCharBuffer();

fc.read(bb);
Matcher matcher = pattern.matcher(cb);
// etc.
...