Отформатируйте сообщение с помощью 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
, хотя это не сработало. Какие изменения необходимы, чтобы заставить его работать?
Ответы
Ответ 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
) вместо одиночной кавычки '
устраняет проблему без дублирования \'
.