2013-11-19 2 views
3

Я определяю строки в моем файле strings.xml:Java MessageFormat - выпуск спасаясь символов

<string name="unformatted_string">Here\'s a song I\'ve created just for you\! {0}</string> 

А потом извлечь эту строку и с помощью MessageFormat.format, я заменить {0} с URL:

String str = MessageFormat.format(getString(R.string.unformatted_string), url); 

Когда я печатаю ул, я вижу это:

Heres a song Ive created just for you http://www.google.com 

The MessageFormat documentation государства, что правила для Qu otes несколько запутывают, а затем продолжают предоставлять только один пример, который использует только двойные кавычки. Из моего чтения документации, кажется, моя одинарная кавычка беду можно было бы решить с помощью «» ':

<string name="unformatted_string">Here'''s a song I'''ve created just for you\! {0}</string> 

Но шаг Упаковки Android ресурсы выдает ошибку, потому что у меня есть апостроф не предшествует \.

Мое единственное требование состоит в том, чтобы строка была определена в strings.xml (для поддержки локализации).

ответ

3

Файл является файлом андроидов resoure, в котором указывается, что каждый апостроф сбежал с предыдущим backslah. И MessageFormat требует, чтобы каждый апостроф в шаблоне удваивался. Так что вам нужно два убежали апостроф:

<string name="unformatted_string">Here\'\'s a song I\'\'ve created just for you\! {0}</string> 
+0

Спасибо JB! Это сделал трюк. – Mark

0

В XML вы можете использовать объект &#39; для апострофа.

Однако ресурс android выполняет некоторую дополнительную обработку после разбора XML и требует, чтобы апострофы были экранированы с помощью обратного слэша - независимо от того, представлены ли они как объекты или помещены непосредственно в разметку. Это не имеет ничего общего с XML. См. guidelines here. Тьфу! XML уже предлагает полную кодировку для всех возможных символов, это позор, что система Android решила наложить этот ненужный слой на верх.

Наконец, для форматирования сообщения для вывода требуется, чтобы апострофы удваивались, поскольку апостроф является символом escape для Java MessageFormat.

+0

Android Ресурсного шаг Упаковка по-прежнему выдает ошибку при использовании ' – Mark

+0

Хм, хорошо, что является стандартным XML. Возможно, вам нужно положить два из них, например. '' '' однако это довольно уродливо. – AgilePro

+0

Да, я думаю, вам все равно нужно убежать от него, чтобы это сработало. Решение JB немного чище. Благодаря! – Mark

Смежные вопросы