在string.xml中使用带有%符号的占位符表示String.format()

时间:2016-07-19 18:32:14

标签: java android xml string string-formatting

我在string.xml中使用占位符%1 $ d获取int值,然后我想在同一%中显示TextView个签名,以便它&#37; <string name="uploadProgress">%1$d&#37;<string> 1}}。所以我就这样使用它。

int progress = 10;
textView.setText(String.format(getString(R.string.uploadProgress), progress));

现在在Java Code中,我就这样使用它了。

%

但它显示:

  

java.util.UnknownFormatConversionException:Conversion:

我试过:

  1. &#37;代替%1$d
  2. &#37;和{{1}}之间加一个空格(但我不想要空间 实际上。)
  3. 但没有运气。我怎样才能做到这一点?我已经看了另外一些SO解决问题,但我找不到特别的问题。

2 个答案:

答案 0 :(得分:5)

我也遇到过这种情况。有两种方法可以转义XML字符串资源中的文字百分比符号。

对于您的情况(带参数的字符串,例如%1$d),您应使用%%来转义百分比符号字面值。

如果您的字符串没有参数,那么您应该使用\u0025来转义文字百分号。

如果您在不带参数的字符串中使用%%,则getString()会将其解析为文字%%而不是转义它。如果您在带有参数的字符串中使用\u0025,那么getString()会在尝试将%视为格式参数时崩溃。

答案 1 :(得分:2)

如果您的字符串资源没有参数,那么您可以使用formatted =“false”属性。

在您的情况下,您需要使用双倍 - %