2015-10-30 2 views
0

J'ai beaucoup de fichiers texte avec la structure suivante: FileName_Location.txt. Dans le fichier texte, il y a trois valeurs que je dois remplacer.Remplacer les paramètres dans un fichier texte

<filename="" location="" extension=""> 

Il serait <filename="FileName" location="Location" extension="txt">

Je reçois toutes ces valeurs par le nom du fichier. Mais il se peut aussi que les valeurs/paramètres du fichier texte soient erronés, donc je dois les écraser.

Mon problème est de savoir comment je peux localiser les bonnes positions pour ajouter ou remplacer les valeurs.

+0

Merci pour vos efforts – Matej

Répondre

1

Voici un code Java faisant un usage intensif des expressions régulières qui fonctionne sur une seule ligne de votre question originale. Il extrait plusieurs groupes, puis reconstruit la ligne, en insérant les valeurs que vous voulez en cours de route.

String pattern = "^(<filename=)(\".*\")\\s(location=)(\".*\")\\s(extension=)(\".*\">)$"; 
String input = "<filename=\"\" location=\"\" extension=\"\">"; 
// you can uncomment this next line to test the case when values be 
// already present in the input line 
//String input = "<filename=\"stuff\" location=\"stuff\" extension=\"stuff\">"; 
System.out.println("Input string:"); 
System.out.println(input); 

// you can replace these next 3 variables with whatever values you want 
// e.g. you could put this code into a loop 
String fileName = "FileName";   // a new filename 
String location = "Location";   // a new location 
String extension = "txt";    // a new extension 
Pattern r = Pattern.compile(pattern); 
Matcher m = r.matcher(input); 
if (m.find()) { 
    StringBuilder res = new StringBuilder(); 
    res.append(m.group(1)).append("\"").append(fileName).append("\" "); 
    res.append(m.group(3)).append("\"").append(location).append("\" "); 
    res.append(m.group(5)).append("\"").append(extension).append("\">"); 
    System.out.println("Output string:"); 
    System.out.println(res); 
} else { 
    System.out.println("NO MATCH"); 
} 

Ce code a été testé sur la version IntelliJ 11 (oui je suis trop paresseux pour mettre à jour) et il fonctionne très bien.

Sortie:

Input string: 
<filename="" location="" extension=""> 
Output string: 
<filename="FileName" location="Location" extension="txt"> 
+0

Testez l'expression régulière Regex 101. Vous verrez comment cela fonctionne. Je divise votre chaîne d'entrée en morceaux et ensuite la réassemble avec les valeurs que vous voulez, en les remplaçant si nécessaire. –

+0

A m'a aidé, mais pourriez-vous expliquer quel but ont \\ s? marque un espace? – Matej

+0

Correct. '\\ s' est un caractère d'espace unique (par exemple un espace). Vous avez des espaces entre le nom de fichier, l'emplacement et les pièces d'extension de la chaîne. –