Отформатируйте сообщение с помощью MessageFormat.формат() в Java

Я сохранил некоторые сообщения в пакете ресурсов. Я пытаюсь отформатировать эти сообщения следующим образом.

import java.text.MessageFormat;

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

предположим, что первый параметр i.e фактическое сообщение хранится в файле свойств, который каким-то образом извлекается.

второй параметр i.e 5 является динамическим значением и должно быть помещено в заполнитель {0} чего не происходит. Следующая строка печатает,

вы собираетесь удалить {0} строк.

в заполнитель не заменяется фактическим параметром.


это Апостроф здесь - You're. Я пытался избежать его, как обычно, как You're но это не сработало. Какие изменения необходимы для его работы?

5 ответов


добавить дополнительный Апостроф ' до MessageFormat шаблон String для обеспечения ' отображается символ

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

Апостроф (он же одиночная кавычка) в шаблоне MessageFormat запускается строка с кавычками и не интерпретируется сама по себе. От javadoc

сама одинарная кавычка должна быть представлена двойными одинарными кавычками " по всей строке.

на String You\'re is эквивалентно добавлению символа обратной косой черты в String Так что единственная разница будет в том, что You\re будет производиться, а не Youre. (перед решением двойной кавычки '' прикладная)


просто убедитесь, что вы использовали двойной Апостроф (")

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

Edit:

в строке можно использовать пару одинарных кавычек для цитирования любых произвольных символов, кроме одинарных кавычек. Например, строка шаблона "'{0} ' "представляет строку" {0}", а не FormatElement. ...

любая непревзойденная цитата рассматривается как закрытая в конце данного шаблона. Например, строка шаблона"'{0}" рассматривается как узор"'{0}'".

источник http://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html


вам нужно использовать двойной Апостроф вместо одного в "ВЫ"re, например:

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

для всех, у кого есть проблемы с Android в строке.xml, используйте \ ' \ ' вместо одинарной кавычки.


через апостроф (Unicode:\u2019) вместо одной кавычки ' Исправлена ошибка без удвоения \'.