Erweitern Sie Umgebungsvariablen im Text

8

Ich versuche, eine Funktion zu schreiben, um Substitutionen von Umgebungsvariablen in Java durchzuführen. Also wenn ich eine Zeichenfolge hätte, die so aussieht:

  

Der APPDATA-Pfad des Benutzers $ {USERNAME} lautet   $ {APPDATA}.

Ich möchte, dass das Ergebnis lautet:

  

Der Pfad des Benutzers msmith's APPDATA ist   C: \ Benutzer \ msmith \ AppData \ Roaming.

Bisher sieht meine fehlerhafte Implementierung so aus:

%Vor%

Unter Verwendung des obigen Beispieltextes gibt matcher.matches() false zurück. Wenn mein Beispieltext jedoch ${APPDATA} ist, funktioniert es.

Kann jemand helfen?

    
Michael Smith 20.01.2011, 21:29
quelle

4 Antworten

8

Sie möchten % co_de nicht verwenden % Übereinstimmungen versuchen, die gesamte Eingabezeichenfolge abzugleichen.

  

Versucht, die gesamte Region mit dem Muster abzugleichen.

Was Sie wollen, ist matches() . Das passt zu jeder Instanz Ihres Musters. Lesen Sie die Dokumentation zu while(matcher.find()) { .

Innerhalb jeder Übereinstimmung ist find() die gesamte übereinstimmende Zeichenfolge ( group 0 ) und ${appdata} ist group 1 part.

Ihr Endergebnis sollte etwa so aussehen:

%Vor%     
jjnguy 20.01.2011, 21:40
quelle
10

Ich sehe, Sie haben bereits eine Antwort akzeptiert. Wenn Sie jedoch den Code nicht selbst schreiben möchten, hat die Apache Commons Lang-Bibliothek eine Klasse namens StrSubstitutor . Es macht genau das.

    
rfeak 20.01.2011 21:55
quelle
2
%Vor%     
user2161699 12.03.2013 15:28
quelle
0

Wenn Sie nicht gerade versuchen, Dinge von Grund auf neu zu erstellen, sollten Sie sich nicht wirklich die Mühe machen, Ihre eigene Template-Engine zu implementieren - es gibt Mengen bereits verfügbar .

Sehr gut ist FreeMaker (mit Java API ). Hier ist ein Tutorial: Ссылка ,

    
DVK 20.01.2011 21:43
quelle

Tags und Links