Подтвердить что ты не робот

Отформатируйте сообщение с помощью MessageFormat.format() в 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 является динамическим значением и должен быть помещен в placeholder {0}, которого не происходит. Следующая строка печатает,

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

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


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

4b9b3361

Ответ 1

Добавьте дополнительный апостроф ' в шаблон MessageFormat String, чтобы отобразить символ '

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

Апостроф (aka single quote) в шаблоне MessageFormat запускает строку с кавычками и не интерпретируется сама по себе. Из javadoc

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

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

Ответ 2

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

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

Edit:

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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