Formatieren Sie eine Nachricht mit MessageFormat.format () in Java

72

Ich habe einige Nachrichten in einem Ressourcenpaket gespeichert. Ich versuche, diese Nachrichten wie folgt zu formatieren.

import java.text.MessageFormat;

String text = MessageFormat.format("You're about to delete {0} rows.", 5);
System.out.println(text);

Angenommen, der erste Parameter, dh die eigentliche Nachricht, wird in einer Eigenschaftendatei gespeichert, die irgendwie abgerufen wird.

Der zweite Parameter, dh 5, ist ein dynamischer Wert und sollte in den Platzhalter eingefügt werden, {0}was nicht der Fall ist. Die nächste Zeile wird gedruckt,

Du bist dabei, {0} Zeilen zu löschen.

Der Platzhalter wird nicht durch den aktuellen Parameter ersetzt.


Es ist der Apostroph hier - You're. Ich habe versucht, wie gewohnt zu entkommen, als You\\'reob es nicht funktioniert hätte. Welche Änderungen sind erforderlich, damit es funktioniert?

Sehr klein
quelle

Antworten:

122

Fügen Sie 'dem MessageFormatMuster ein zusätzliches Apostroph hinzu , Stringum sicherzustellen, dass das 'Zeichen angezeigt wird

String text = 
     java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
                                         ^

Ein Apostroph (auch als einfaches Anführungszeichen bezeichnet ) in einem MessageFormat-Muster startet eine Zeichenfolge in Anführungszeichen und wird nicht einzeln interpretiert. Aus dem Javadoc

Ein einfaches Anführungszeichen selbst muss durch doppelte einfache Anführungszeichen in einem String dargestellt werden.

Das String You\\'reentspricht einem umgekehrten Schrägstrich , um die auf das Hinzufügen Stringso ist der einzige Unterschied , dass sein wird You\reproduziert werden , statt Youre. (bevor doppelte Anführungszeichen ''angewendet wird)

Reimeus
quelle
Gibt es eine andere Methode, um ein solches Format zu erstellen, ohne ein einfaches Anführungszeichen in ein doppeltes einfaches Anführungszeichen umzuwandeln? weil es nervt.
Mostafa Vatanpour
Warum muss ich das in C # nicht tun?
Alex78191
10

Stellen Sie nur sicher, dass Sie einen doppelten Apostroph ('') verwendet haben.

String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
System.out.println(text);

Bearbeiten:

Innerhalb eines Strings können zwei einfache Anführungszeichen verwendet werden, um beliebige Zeichen außer einfachen Anführungszeichen in Anführungszeichen zu setzen. Beispielsweise repräsentiert die Musterzeichenfolge "'{0}'" die Zeichenfolge "{0}" und kein FormatElement. ...

Jedes nicht übereinstimmende Zitat wird am Ende des angegebenen Musters als geschlossen behandelt. Beispielsweise wird die Musterzeichenfolge " ' {0}" als Muster " ' {0} ' " behandelt.

Quelle http://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html

Adhikari
quelle
6

Sie müssen im "Sie sind" einen doppelten Apostroph anstelle eines einfachen verwenden, z.

String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
System.out.println(text);
FOOM
quelle
3

Verwenden Sie für alle, die Android-Probleme in der Datei string.xml haben, \ '\' anstelle von einfachen Anführungszeichen.

Uriel Frankel
quelle
2

Die Verwendung eines Apostrophs (Unicode :) \u2019anstelle eines einfachen Anführungszeichens 'behebt das Problem, ohne das zu verdoppeln \'.

T Efron
quelle
0

Hier ist eine Methode, bei der der Code nicht bearbeitet werden muss und die unabhängig von der Anzahl der Zeichen funktioniert.

String text = 
  java.text.MessageFormat.format(
    "You're about to delete {0} rows.".replaceAll("'", "''"), 5);
Viktor Wellboy
quelle