Es gibt bereits einige Fragen über das MessagingFormat im Allgemeinen, aber ich habe noch nichts gefunden, das meine Frage beantwortet. Ich bin mir bewusst, dass einzelne Anführungszeichen das Muster brechen werden. Wenn Sie MessageFormat oder Log4j verwenden, kann etwas wie "does not" mögliche Platzhalter zerstören.Escaping einfache Anführungszeichen für Java MessageFormat
Einfaches Beispiel:
@Test
public void test() {
String pattern = "{0} doesn't show values ({1}, {2}, {3}, {4})";
final Object[] args = { "Testpattern", 100, 200, 300, 400 };
System.out.println(MessageFormat.format(pattern, args));
pattern = pattern.replaceAll("(?<!')'(?!')", "''");
System.out.println("Replaced singlequotes: " + MessageFormat.format(pattern, args));
}
Ausgang:
Testpattern doesnt show values ({1}, {2}, {3}, {4})
Replaced singlequotes: Testpattern doesn't show values (100, 200, 300, 400)
Also, wenn ich alle einfachen Anführungszeichen ersetzen eine regular expression verwenden, wird es funktionieren. Ich habe gerade den regulären Ausdruck erfunden, indem ich versuche, "single singlequotes" nur mit dem regulären Ausdruck Lookahead/Lookbehind zu ersetzen.
Regulärer Ausdruck ersetzen Beispiele:
doesn't -> doesn''t
doesn''t -> doesn''t
doesn'''t -> doesn'''t
Ich frage mich nur, wenn überhaupt Apache-Commons-Dienstprogramm (oder jede andere Bibliothek) vorhanden ist, die die „escapeSingleQuotes“ wird für mich behandeln, anstatt meine eigenen regulären Ausdruck der Bereitstellung ...?
Nein, StringEscapeUtils.escapeEcmaScript() unterbricht MessageFormat/logging. (Ausgabe: Ersetzt einzelneQuoten: Testmuster zeigt keine Werte ({1}, {2}, {3}, {4})) – proko