Rappresenta un file di testo come singola unità in Java e le stringhe corrispondenti nel testo

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

Domanda

Come posso avere un file di testo (o file XML) rappresentato come una stringa intera e cercare (o abbinare) una stringa particolare in essa?

Ho creato un oggetto BufferedReader:

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

e poi ho provato a usare la classe Scanner con la sua opzione per specificare diversi delimitatori, come questo:

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

Usando la classe Scanner in questo modo posso leggere il testo riga per riga o parola per parola, ma non mi aiuta, perché a volte nel testo, che voglio elaborare, ho

</review><review>

e vorrei dire: se trovi " <review> " in qualunque parte del testo, fai qualcosa con le seguenti righe (o parti di testo) seguenti fino a trovare " </review> " ;. Il problema è che <=> e <=> si trovano in punti diversi del testo e talvolta incollati ad altro testo (quindi lo spazio vuoto come delimitatore non mi aiuta).

Ho pensato che avrei potuto usare l'API delle espressioni regolari in Java (le classi Pattern e Matcher), ma sembrano corrispondere a una particolare stringa o linea e voglio avere il testo come una stringa continua (almeno questo sono state le mie impressioni da quello che ho letto su di loro). Potresti dirmi quali strutture / metodi / classi dovrei usare in questo caso? Grazie.

È stato utile?

Soluzione

Non tentare di analizzare XML con espressioni regolari; porta solo al dolore. Ci sono molti molto belli esistente XML API già in Java; perché provare a reinventarli?

Comunque, per cercare una stringa in un file di testo, dovresti:

  1. Carica il file come stringa ( esempio )
  2. Crea un Pattern per cercare
  3. Utilizza un Matcher per scorrere tutte le partite

Altri suggerimenti

Mi sembra che tu stia provando a lavorare con un file XML strutturato e ti suggerirei di esaminare javax.xml.parsers.DocumentBuilder o altro integrato API per analizzare il documento.

Usa un parser XML.

Oppure usa xpath, come in questo esempio .

  

Ho pensato che avrei potuto usare l'API delle espressioni regolari in Java (le classi Pattern e Matcher), ma sembrano corrispondere a una particolare stringa o linea e voglio avere il testo come una stringa continua

Uhm, qualcosa ti impedisce di leggere il file XML in una stringa e quindi di operare su quello, usando l'API delle espressioni regolari?

Puoi facilmente leggere un file in una stringa usando ad es. FileUtils da Apache Commons IO : vedi readFileToString(File file, String encoding) .

Vorrei anche raccomandare di usare un'API di analisi XML ... Ma siccome vuoi fare qualcosa solo in " review " tag, forse potresti usare SAX meglio di DOM ...

Penso che qui possiamo copiare una singola riga nel file di testo in una stringa e quindi provare a far corrispondere una sottostringa (stringa di ricerca) con la stringa (linea)

Ma l'errore produce durante l'esecuzione di metacaratteri come / o # ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top