2013-07-09 13 views
6

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

Siehe Within a String, a pair of single quotes can be used to quote any arbitrary characters except single quotes. For example, pattern string "'{0}'" represents string "{0}", not a FormatElement. A single quote itself must be represented by doubled single quotes '' throughout a String.

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 ...?

Antwort

3

Da ich nicht eine andere API gefunden haben, die das entwichene Singlequote bieten würde (‘ -> '') Ich werde bei m bleiben y regulärer Ausdruck.

8

Es half mir, so etwas zu tun:

`doesn''t` 
+0

Ja, das funktioniert, wenn Sie einfache Anführungszeichen und MessageFormat kennen. Aber es ist keine gute Wahl, ein Framework bereitzustellen, das darauf angewiesen ist, dass Entwickler immer zwei Zitate schreiben. – proko

+0

Die Empfehlung von ICU besteht darin, das ASCII-Apostroph ('U + 0027) nur für das Entweichen von Syntaxzeichen zu verwenden und das hübsche einfache Anführungszeichen (' U + 2019) für tatsächliche Apostrophe und einfache Anführungszeichen in einem Nachrichtenmuster zu verwenden. –

2

Für alle, die Android Probleme im string.xml, verwenden Sie \ '\' statt Apostroph hat.

3

Die Empfehlung von ICU besteht darin, den ASCII-Apostroph ('U + 0027) nur für das Entweichen von Syntaxzeichen zu verwenden und das hübsche einfache Anführungszeichen (' U + 2019) für tatsächliche Apostrophe und einfache Anführungszeichen in einem Nachrichtenmuster zu verwenden.

+0

Ja, das würde tatsächlich helfen. Unser Framework stellt einen Logger bereit und sollte einfache Anführungszeichen kennen und das Nachrichtenformat nicht unterbrechen.Da andere den Logger verwenden können, können wir nicht kontrollieren, ob jeder Entwickler richtige Anführungszeichen verwendet. – proko

Verwandte Themen