Ich habe eine kleine api eine Zeichenfolge in einer anderen Zeichenfolge zu konvertieren, indem Eigenschaft Inhaber zu aktualisieren (Muster {{property_name}}Java ersetzen Unterkette (Muster) von einem anderen Unterkette (Wert) Ausgabe
Hier mein Versuch:..
public class TestApp {
public static void main(String[] args) {
Map<String, String> props = new HashMap<>();
props.put("title", "login");
String sourceTitle = "<title>{{ title }}</title>";
System.out.println(updatePropertyValue(sourceTitle, props));
// Print: <title>login</title>
// ERROR if
props.put("title", "${{__messages.loginTitle}}");
System.out.println(updatePropertyValue(sourceTitle, props));
// Expected: <title>${{__messages.loginTitle}}</title>
// Exception:
// Exception in thread "main"
// java.lang.IllegalArgumentException: named capturing group has 0 length name
// at java.util.regex.Matcher.appendReplacement(Matcher.java:838)
}
static String updatePropertyValue(String line, Map<String, String> properties) {
for (Entry<String, String> entry : properties.entrySet()) {
String holder = "\\{\\{\\s*" + entry.getKey() + "\\s*\\}\\}";
line = Pattern.compile(holder, Pattern.CASE_INSENSITIVE)
.matcher(line).replaceAll(entry.getValue());
}
return line;
}
}
Es funktioniert gut, wenn der Wert der Eigenschaft keine Sonderzeichen, haben nicht wie $
Gehen Sie davon aus, dass die Eigenschaftsschlüssel enthalten Buchstaben nur
Irgendeine Lösung? Vielen Dank!
Haben Sie sich die [Dokumentation der 'replaceAll' Methode] angeschaut (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#replaceAll (java. lang.String))? Vor allem, was es über Dollarzeichen sagt? – RealSkeptic
@RealSkeptic: Ja, ich habe es mir angesehen. Was ich brauche, ist, dass es eine andere Lösung dafür gibt. Vielen Dank! – Loc
Verwenden Sie '.replaceAll (entry.getValue(). Replace (" $ "," \\ $ "))' 'in der' updatePropertyValue' Methode. –