Representar un archivo de texto como una sola unidad en Java y hacer coincidir cadenas en el texto

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

Pregunta

¿Cómo puedo representar un archivo de texto (o un archivo XML) como una cadena completa y buscar (o hacer coincidir) una cadena en particular en él?

He creado un objeto BufferedReader:

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

y luego intenté usar la clase Scanner con su opción para especificar diferentes delimitadores, así:

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

Usando la clase Scanner de esta manera puedo leer el texto línea por línea o palabra por palabra, pero no me ayuda, porque a veces en el texto que quiero procesar, tengo

</review><review>

y me gustaría decir:si tu encuentras "<review>" en cualquier parte del texto, haga algo con las siguientes líneas (o fragmentos de texto) hasta que encuentre "</review>".El problema es ese <review> y </review> están en diferentes lugares del texto y, a veces, están pegados a otro texto (por lo tanto, el espacio vacío como delimitador no me ayuda).

He pensado que podría usar la API de expresiones regulares en Java (las clases Pattern y Matcher), pero parecen coincidir con una cadena o línea en particular, y quiero tener el texto como una cadena continua (al menos esta fue mi impresión). por lo que he leído sobre ellos).¿Podría decirme qué estructuras/métodos/clases debo usar en este caso?Gracias.

¿Fue útil?

Solución

No intente analizar XML con expresiones regulares; solo conduce al dolor. Hay muchos muy agradables existente XML APIs en Java ya; ¿Por qué tratar de reinventarlos?

De todos modos, para buscar una cadena en un archivo de texto, debe:

  1. Cargue el archivo como una cadena ( ejemplo )
  2. Cree un Pattern para buscar
  3. Utilice un Matcher para recorrer las coincidencias

Otros consejos

Me parece que está tratando de trabajar con un archivo xml estructurado, y sugeriría que examine javax.xml.parsers.DocumentBuilder u otro construido en API para analizar el documento.

Use un analizador XML.

O use xpath, como en este ejemplo .

  

Pensé que podría usar la API de expresión regular en Java (las clases Pattern y Matcher), pero parecen coincidir con una cadena o línea particular, y quiero tener el texto como una cadena continua

Um, ¿hay algo que te impide leer el archivo XML en una Cadena, y luego operar en eso, usando la API de expresión regular?

Puede leer fácilmente un archivo en una cadena usando, p. FileUtils de Apache Commons IO : vea readFileToString(File file, String encoding) .

También recomendaría usar una API de análisis XML ... Pero como solo desea hacer algo en caso de " review " etiqueta, tal vez podrías usar SAX mejor que DOM ...

Creo que aquí, podemos copiar una línea individual en el archivo de texto en una cadena y luego tratar de hacer coincidir una subcadena (cadena de búsqueda) con la cadena (línea)

Pero el error se produce al excitar metacaracteres como / o #, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top