Representando um arquivo de texto como uma única unidade em Java, e cordas correspondência no texto

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

Pergunta

Como posso ter um arquivo de texto (ou arquivo XML) representado como uma seqüência inteira, e procurar (ou jogo) uma corda especial nele?

Eu criei um objeto BufferedReader:

BufferedReader input =  new BufferedReader(new FileReader(aFile));

e, em seguida, eu tentei usar a classe Scanner com a sua opção para especificar delimitadores diferentes, como este:

//Scanner scantext = new Scanner(input);
//Scanner scantext = new Scanner(input).useDelimiter("");
Scanner scantext = new Scanner(input).useDelimiter("\n");
while (scantext.hasNext()) {  ... }

Usando a classe Scanner assim I pode ler o texto linha por linha ou palavra por palavra, mas ele não me ajudar, porque às vezes no texto, o que eu quero processo, eu tenho

</review><review>

e eu gostaria de dizer: se você encontrar "<review>" em qualquer lugar no texto, fazer algo com as seguintes linhas seguintes (ou pedaço de texto) até encontrar "</review>". O problema é que <review> e </review> estão em lugares diferentes no texto, e às vezes colado ao outro texto (portanto, o espaço vazio como delimitador não me ajuda).

Eu pensei que eu poderia usar a API de expressão regular em Java (o padrão e as classes Matcher), mas eles parecem corresponder a um barbante ou linha particular, e eu quero ter o texto como uma cadeia contínua (pelo menos este foi minhas impressões do que eu li sobre eles). Você poderia me dizer o que estruturas / métodos / classes que eu deveria usar neste caso? Obrigado.

Foi útil?

Solução

Não tente XML parse com expressões regulares; pois isso só leva à dor. Há um monte de muito bom XML APIs em Java já; por que tentar reinventá-los?

De qualquer forma, para procurar uma string em um arquivo de texto, você deve:

  1. Carregue o arquivo como uma string ( exemplo )
  2. Criar um Pattern para procurar
  3. Use a Matcher para percorrer todas as correspondências

Outras dicas

Parece-me como se você está tentando trabalhar com um arquivo xml estruturado, e sugiro que você olhar para javax.xml.parsers.DocumentBuilder ou outro construído em APIs para analisar o documento.

Use um analisador XML.

Ou usar o XPath, como neste exemplo .

Eu pensei que eu poderia usar a API de expressão regular em Java (o padrão e as classes Matcher), mas eles parecem corresponder a um barbante ou linha particular, e eu quero ter o texto como uma cadeia contínua

Um, faz algo impedi-lo de ler o arquivo XML em um String, e depois operando em que, usando a API expressão regular?

Você pode facilmente ler um arquivo em uma string usando por exemplo FileUtils de Apache Commons IO : veja readFileToString(File file, String encoding) .

Eu também recomendo usar uma análise de XML API ... Mas como você só quer fazer algo em caso de "avaliação" tag, talvez você poderia usar SAX melhor do DOM ...

Eu acho que aqui, podemos copiar linha individual no arquivo de texto em uma seqüência e, em seguida, tentar igualar a subsequência (string de pesquisa) com a string (linha)

Mas de erro produz enquanto metacharacters excuting gosta / ou # etc ..

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top