我在自己的strings.xml文件中定义一个字符串:

<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);

当我打印str时,我看到了:
Heres a song Ive created just for you http://www.google.com

MessageFormat documentation指出引号的规则有些混乱,然后继续仅提供一个仅使用双引号的示例。通过阅读文档,似乎可以通过使用'''解决我的单引号问题:
<string name="unformatted_string">Here'''s a song I'''ve created just for you\! {0}</string>

但是Android资源打包步骤会引发错误,因为我的撇号前面没有\

我唯一的要求是在strings.xml中定义字符串(以支持本地化)。

最佳答案

该文件是android resoure文件,该文件要求每个撇号都使用前面的backslah进行转义。 MessageFormat要求将模式中的每个撇号都加倍。因此,您需要两个转义的撇号:

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

10-07 17:11