在strings.xml中使用百分号符号

33

我正在尝试从string.xml格式化一个字符串以便重用到多个值中。我遇到了一些问题,因为该字符串还应包含由格式化程序使用的百分号符号。我已经尝试使用其Unicode表示形式替换%符号,但似乎不起作用:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="teststring">The new value is %1$s%</string>
    <string name="teststring2">The new value is %1$s\u0025</string>
    <string name="teststring3">The new value is %1$s</string>
</resources>

Java代码:

String value = "25";
String formattedString = context.getResources().getString(R.string.teststring), value);

在这个例子中,teststringteststring2会产生错误,而teststring3则可以正常工作。在xml字符串中正确放置%符号以得到格式化的字符串“The new value is 25%”是什么?

堆栈跟踪:

FATAL EXCEPTION: main
java.util.UnknownFormatConversionException: Conversion: 
    at java.util.Formatter$FormatSpecifierParser.unknownFormatConversionException(Formatter.java:2304)
    at java.util.Formatter$FormatSpecifierParser.advance(Formatter.java:2298)
    at java.util.Formatter$FormatSpecifierParser.parseConversionType(Formatter.java:2377)
    at java.util.Formatter$FormatSpecifierParser.parseArgumentIndexAndFlags(Formatter.java:2348)
    at java.util.Formatter$FormatSpecifierParser.parseFormatToken(Formatter.java:2281)
    at java.util.Formatter.doFormat(Formatter.java:1069)
    at java.util.Formatter.format(Formatter.java:1040)
    at java.util.Formatter.format(Formatter.java:1009)
    at java.lang.String.format(String.java:1988)
    at android.content.res.Resources.getString(Resources.java:343)
    at (... and so on)

正确答案是

<string name="teststring">The new value if %1$s%%</string>

不应设置formatted =“false”。


我修改了答案,请试一下。 - Arun C
7个回答

45

使用

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="teststring">The new value is %1$s%%</string>

</resources>

在Java中

String value = "25";
String formattedString =
    String.format(getResources().getString(R.string.teststring), value);
Log.i("",formattedString);

%% 可以使用,但是应该有可能在 strings.xml 文件中添加 Unicode 字符。 - Zoombie
在运行4.4.2时,我的程序崩溃了。 - Chicowitz

9

你可以尝试使用\%%代替%吗?

例如:

<string name="teststring">The new value is \%%</string>

或者

<string formatted="false" name="teststring" >The new value is %</string>

9

试试这个

<string  name="teststring"> The new value is %1$s %% </string>

2

请查看这个:

<string name="teststring">The new value is %1$s %%</string>

String value = "25";
String formattedString = this.getResources().getString(R.string.teststring, mPageNumber);

1
String value = "25";

String formattedString = "The new value is " + value + (char) 0x0025;

如果现在使用Log.d(TAG, formattedString);,它将记录日志。
The new value is 25%

0
<?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="offerString">The new value is %1$s%% %2$s</string>
    </resources>

String offerOnHdfc = "25";
String formattedString = String.format(getResources().getString(R.string.offerString), offerOnHdfc);
Log.i("",formattedString);

0

使用方法如下:

String str = context.getResources().getString(R.string.teststring);
String formattedString = String.format(str, value);

这不应该与String str = context.getResources().getString(R.string.teststring, value);相同吗? - danijoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接