2013-05-30 117 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