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

Lesezeit: 2 Minuten

Benutzer-Avatar
Sehr klein

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, ist in einer Eigenschaftsdatei gespeichert, die irgendwie abgerufen wird.

Der zweite Parameter, dh 5, ist ein dynamischer Wert und sollte im Platzhalter platziert werden {0} was nicht passiert. Die nächste Zeile wird gedruckt,

Sie sind im Begriff, {0} Zeilen zu löschen.

Der Platzhalter wird nicht durch den eigentlichen Parameter ersetzt.


Es ist das Apostroph hier – You're. Ich habe versucht, ihm wie gewohnt zu entkommen You\\'re obwohl es nicht funktioniert hat. Welche Änderungen sind erforderlich, damit es funktioniert?

Benutzer-Avatar
Reimäus

Fügen Sie ein zusätzliches Apostroph hinzu ' zum MessageFormat Muster String die zu gewährleisten ' Zeichen angezeigt

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

Ein Apostroph (aka einzelnes Zitat) in einem MessageFormat-Muster beginnt eine Zeichenfolge in Anführungszeichen und wird nicht eigenständig interpretiert. Von dem javadoc

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

Das String You\\'re entspricht dem Hinzufügen eines Backslash-Zeichens zum String also wird der einzige unterschied sein You\re produziert wird, anstatt Youre. (vor der Lösung mit doppelten Anführungszeichen '' angewandt)

  • Gibt es eine andere Methode, um ein solches Format zu erstellen, ohne einfache Anführungszeichen in doppelte einfache Anführungszeichen zu konvertieren? weil es nervt.

    – Mostafa Vatanpour

    3. Februar 2018 um 13:44 Uhr


  • Warum muss ich das in C# nicht machen?

    – Alex78191

    18. Februar 2019 um 15:58 Uhr

Benutzer-Avatar
Adhikari

Stellen Sie nur sicher, dass Sie doppeltes 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 kann ein Paar einfacher Anführungszeichen verwendet werden, um beliebige Zeichen außer einfachen Anführungszeichen zu zitieren. Beispielsweise stellt die Musterzeichenfolge “‘{0}'” die Zeichenfolge “{0}” dar, kein FormatElement. …

Jede nicht übereinstimmende Notierung wird am Ende des gegebenen Musters als geschlossen behandelt. Beispiel: Musterzeichenfolge “{0}” wird als Muster behandelt “{0}“.

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

Benutzer-Avatar
FOOM

Sie müssen doppelte Apostrophe anstelle von einfachen in “You”re” verwenden, z. B.:

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

Benutzer-Avatar
T Efron

Verwendung eines Apostrophs (Unicode: \u2019) anstelle eines einfachen Anführungszeichens ' Das Problem wurde behoben, ohne die zu verdoppeln \'.

Für alle, die Android-Probleme in der string.xml haben, verwenden Sie \’\’ anstelle von einfachen Anführungszeichen.

Benutzer-Avatar
Viktor Wellboy

Hier ist eine Methode, die keine Bearbeitung des Codes erfordert und unabhängig von der Anzahl der Zeichen funktioniert.

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

1251780cookie-checkFormatieren Sie eine Nachricht mit MessageFormat.format() in Java

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy