Representar un archivo de texto como una sola unidad en Java y hacer coincidir cadenas en el texto
-
03-07-2019 - |
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.
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.