Formaat een bericht met MessageFormat.format() in Java

Ik heb een aantal berichten opgeslagen in een bronnenbundel. Ik probeer deze berichten als volgt op te maken.

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

Veronderstel dat de eerste parameter, d.w.z. het eigenlijke bericht, is opgeslagen in een eigenschappenbestand dat op de een of andere manier wordt opgehaald.

De tweede parameter, d.w.z. 5, is een dynamische waarde en moet in de tijdelijke aanduiding {0}worden geplaatst, wat niet gebeurt. De volgende regel wordt afgedrukt,

U staat op het punt {0} rijen te verwijderen.

De tijdelijke aanduiding wordt niet vervangen door de eigenlijke parameter.


Het is de apostrof hier – You're. Ik heb geprobeerd om er zoals gewoonlijk aan te ontsnappen, zoals You\\'re, hoewel het niet werkte. Welke veranderingen zijn nodig om het te laten werken?


Antwoord 1, autoriteit 100%

Voeg een extra apostrof toe aan het MessageFormat-patroon Stringom ervoor te zorgen dat het teken wordt weergegeven

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

Een apostrof (ook wel enkel aanhalingsteken) in een MessageFormat-patroon begint een tekenreeks tussen aanhalingstekens en wordt niet op zichzelf geïnterpreteerd. Van de javadoc

Een enkele aanhalingsteken zelf moet worden weergegeven door dubbele enkele aanhalingstekens ” in een String.

De StringYou\\'reis gelijk aan het toevoegen van een backslash-teken aan de String, dus het enige verschil is dat You\rewordt geproduceerd in plaats van Youre. (vóór toepassing van dubbele aanhalingstekens '')


Antwoord 2, autoriteit 9%

Zorg er wel voor dat je dubbele apostrof (”) hebt gebruikt

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

Bewerken:

Binnen een tekenreeks kan een paar enkele aanhalingstekens worden gebruikt om willekeurige tekens aan te halen, behalve enkele aanhalingstekens. Patroontekenreeks “‘{0}'” vertegenwoordigt bijvoorbeeld tekenreeks “{0}”, niet een FormatElement.

Elke niet-overeenkomende quote wordt behandeld als gesloten aan het einde van het gegeven patroon. Patroontekenreeks “{0}” wordt bijvoorbeeld behandeld als patroon “{0}“.

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


Antwoord 3, autoriteit 4%

Je moet een dubbele apostrof gebruiken in plaats van een enkele in de “You”re”, bijvoorbeeld:

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

Antwoord 4, autoriteit 3%

Het gebruik van een apostrof (Unicode: \u2019) in plaats van een enkel aanhalingsteken loste het probleem op zonder de \'.


Antwoord 5, autoriteit 2%

Voor iedereen die Android-problemen heeft in string.xml, gebruik \’\’ in plaats van een enkel aanhalingsteken.


Antwoord 6

Hier is een methode waarbij de code niet hoeft te worden bewerkt en die werkt ongeacht het aantal tekens.

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

Other episodes