Représenter un fichier texte comme une seule unité en Java et faire correspondre les chaînes dans le texte

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

Question

Comment puis-je avoir un fichier texte (ou un fichier XML) représenté sous forme de chaîne entière et y rechercher (ou faire correspondre une chaîne particulière)?

J'ai créé un objet BufferedReader:

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

et puis j'ai essayé d'utiliser la classe Scanner avec son option pour spécifier différents délimiteurs, comme ceci:

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

En utilisant la classe Scanner comme celle-ci, je peux lire le texte ligne par ligne ou mot par mot, mais cela ne m'aide pas, car parfois dans le texte que je veux traiter, j'ai

</review><review>

et je voudrais dire: si vous trouvez & "; <review> &"; n'importe où dans le texte, faites quelque chose avec les lignes suivantes (ou le bout de texte) suivants jusqu'à ce que vous trouviez & "; </review> &"; Le problème est que <=> et <=> se trouvent à des endroits différents dans le texte et sont parfois collés à un autre texte (par conséquent, l'espace vide en tant que délimiteur ne m'aide pas).

J'ai pensé que je pourrais utiliser l'API d'expression régulière en Java (les classes Pattern et Matcher), mais elles semblent correspondre à une chaîne ou à une ligne particulière, et je souhaite avoir le texte sous la forme d'une chaîne continue (au moins cette chaîne). était mes impressions de ce que j'ai lu à leur sujet). Pourriez-vous me dire quelles structures / méthodes / classes je devrais utiliser dans ce cas? Merci.

Était-ce utile?

La solution

N'essayez pas d'analyser XML avec des expressions régulières. cela ne conduit qu'à la douleur. Il y a beaucoup de très gentils existant XML API en Java déjà; pourquoi essayer de les réinventer?

Quoi qu’il en soit, pour rechercher une chaîne dans un fichier texte, vous devez:

  1. Chargez le fichier sous forme de chaîne ( exemple )
  2. Créez un Pattern rechercher
  3. Utilisez un Matcher pour parcourir des correspondances

Autres conseils

Il me semble que vous essayez de travailler avec un fichier XML structuré et vous suggère de consulter javax.xml.parsers.DocumentBuilder ou autre construit API pour analyser le document.

Utilisez un analyseur XML.

Ou utilisez xpath, comme dans cet exemple .

  

J'ai pensé que je pourrais utiliser l'API d'expression régulière en Java (les classes Pattern et Matcher), mais elles semblent correspondre à une chaîne ou à une ligne particulière, et je souhaite que le texte soit une chaîne continue

Euh, quelque chose vous empêche-t-il de lire le fichier XML dans une chaîne et de l'utiliser ensuite, en utilisant l'API d'expression régulière?

Vous pouvez facilement lire un fichier dans une chaîne en utilisant, par exemple, FileUtils d'Apache Commons IO : voir readFileToString(File file, String encoding) .

Je recommanderais également l’utilisation d’une API d’analyse XML ... Mais comme vous voulez faire quelque chose en cas de " review " tag, vous pourriez peut-être utiliser SAX mieux que DOM ...

Je pense qu'ici, nous pouvons copier une ligne individuelle du fichier texte dans une chaîne, puis essayer de faire correspondre une chaîne (chaîne de recherche) avec la chaîne (ligne)

Mais une erreur se produit lors de l’extraction de métacaractères tels que / ou # etc ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top