Представление текстового файла в Java как единое целое и сопоставление строк в тексте - PullRequest
1 голос
/ 04 мая 2009

Как получить текстовый файл (или файл 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>". Проблема в том, что <review> и </review> находятся в разных местах в тексте и иногда приклеиваются к другому тексту (поэтому пустое пространство в качестве разделителя мне не помогает).

Я подумал, что мог бы использовать API регулярных выражений в Java (классы Pattern и Matcher), но они, кажется, соответствуют определенной строке или строке, и я хочу, чтобы текст был одной непрерывной строкой (по крайней мере, это были мои впечатления от прочитанного о них). Не могли бы вы сказать мне, какие структуры / методы / классы я должен использовать в этом случае? Спасибо.

Ответы [ 6 ]

3 голосов
/ 04 мая 2009

Не пытайтесь анализировать XML с помощью регулярных выражений; это приводит только к боли. В Java уже есть множество очень хороших существующих XML API ; зачем пытаться их заново изобретать?

В любом случае, для поиска строки в текстовом файле вам необходимо:

  1. Загрузить файл в виде строки ( пример )
  2. Создать Pattern для поиска
  3. Используйте Matcher для повторения любых совпадений
1 голос
/ 10 мая 2009

Я бы также порекомендовал использовать API синтаксического анализа XML ... Но поскольку вы хотите что-то делать только в случае тега "review", возможно, вы могли бы использовать SAX лучше, чем DOM ...

1 голос
/ 04 мая 2009

Я подумал, что мог бы использовать API регулярных выражений в Java (классы Pattern и Matcher), но они, кажется, соответствуют определенной строке или строке, и я хочу, чтобы текст был одной непрерывной строкой

Хм, что-то мешает вам читать XML-файл в строку, а затем работать с ним, используя API регулярного выражения?

Вы можете легко прочитать файл в строку, используя, например, FileUtils от Apache Commons IO : см. readFileToString(File file, String encoding).

1 голос
/ 04 мая 2009

Использовать парсер XML.

Или используйте xpath, как в этом примере .

1 голос
/ 04 мая 2009

Мне кажется, что вы пытаетесь работать со структурированным XML-файлом, и предлагает вам посмотреть javax.xml.parsers.DocumentBuilder или другие встроенные API * 1004. * разобрать документ.

0 голосов
/ 27 мая 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...