Представление текстового файла в Java как единое целое и сопоставление строк в тексте

StackOverflow https://stackoverflow.com/questions/821583

Вопрос

Как получить текстовый файл (или файл 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 ...

    Я думаю, что здесь мы можем скопировать отдельную строку в текстовом файле в строку, а затем попытаться сопоставить подстроку (строку поиска) со строкой (строкой)

    Но ошибка возникает при исключении метасимволов, таких как / или # и т.д ..

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top