2013-05-30 85 views
20

我试图从string.xml格式化一个字符串,并用它重复使用几个值。我遇到了一些问题,因为字符串还应该包含格式化程序使用的百分比符号。我已经试着用它的Unicode演示来代替%符号但这似乎没有工作:strings.xml中的百分比符号

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

在这个例子中。 teststring和teststring2会产生错误,而teststring3可以正常工作。将格式化的字符串中的%符号放在xml-string中以获得“新值为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”一定不能设置。

+0

我编辑答案尝试 –

回答

30

使用

<?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); 
+0

不工作更换%。同样的例外:( – danijoo

+0

我编辑答案试试吧 –

+2

%1 $ s %%适用于我。谢谢 – Rob

4

你可以试试\%%而不是%??

一样,

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

或者

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

使用\ %% doenst工作 – danijoo

+0

你尝试设置格式=“假” –

+0

如果这太不工作与%% –

0

我们è这样的:

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

这与String相同str = context.getResources()。getString(R.string.teststring,value);? – danijoo

0

检查这一项,

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

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

试试这个

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

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

如果现在Log.d(TAG,formattedString);它会记录

The new value is 25% 
+0

同意。更正。感谢Micky指出它。 – Andrey