Представление текстового файла в Java как единое целое и сопоставление строк в тексте
-
03-07-2019 - |
Вопрос
Как получить текстовый файл (или файл XML) в виде целой строки и найти (или сопоставить) определенную строку в ней?
Я создал объект BufferedReader:
BufferedReader input = new BufferedReader(new FileReader(aFile));
и затем я попытался использовать класс Scanner с его опцией для указания различных разделителей, например:
//Scanner scantext = new Scanner(input);
//Scanner scantext = new Scanner(input).useDelimiter("");
Scanner scantext = new Scanner(input).useDelimiter("\n");
while (scantext.hasNext()) { ... }
Используя такой класс Scanner, я могу либо читать текст построчно, либо слово за словом, но это мне не помогает, потому что иногда в тексте, который я хочу обработать, есть
</review><review>
и я хотел бы сказать: если вы найдете " <review>
" В любом месте текста делайте что-то со следующими строками (или фрагментом текста), пока не найдете " </review>
" ;. Проблема в том, что <=> и <=> находятся в разных местах текста и иногда склеиваются с другим текстом (поэтому пустое пространство в качестве разделителя мне не помогает).
Я думал, что мог бы использовать API регулярных выражений в Java (классы Pattern и Matcher), но они, кажется, соответствуют определенной строке или строке, и я хочу, чтобы текст был одной непрерывной строкой (по крайней мере, это были мои впечатления от прочитанного о них). Не могли бы вы сказать мне, какие структуры / методы / классы я должен использовать в этом случае? Спасибо.
Решение
Не пытайтесь анализировать XML с помощью регулярных выражений; это приводит только к боли. очень приятно существующий XML API в Java уже есть; зачем пытаться их изобретать?
В любом случае, для поиска строки в текстовом файле вы должны:
<Ол>Pattern
искать Matcher
перебирать любые совпадения Другие советы
Мне кажется, что вы пытаетесь работать со структурированным XML-файлом, и предлагаю вам заглянуть в javax.xml.parsers.DocumentBuilder или другой встроенный API для анализа документа.
Используйте анализатор XML.
Или используйте xpath, как в этом примере .
Я думал, что мог бы использовать API-интерфейс регулярных выражений в Java (классы Pattern и Matcher), но они, кажется, соответствуют определенной строке или строке, и я хочу, чтобы текст был одной непрерывной строкой
Хм, что-то мешает вам читать XML-файл в строку, а затем работать с ним, используя API регулярного выражения?
Вы можете легко прочитать файл в строку, используя, например, FileUtils из Apache IO Commons : см. readFileToString(File file, String encoding)
.
Я бы также порекомендовал использовать API синтаксического анализа XML ... Но поскольку вы хотите что-то делать только в случае " review " тег, может быть, вы могли бы использовать SAX лучше, чем DOM ...
Я думаю, что здесь мы можем скопировать отдельную строку в текстовом файле в строку, а затем попытаться сопоставить подстроку (строку поиска) со строкой (строкой)
Но ошибка возникает при исключении метасимволов, таких как / или # и т.д ..