31

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-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" を設定しないでください。

4

7 に答える 7

42

使用する

<?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);
于 2013-05-30T10:57:23.000 に答える
9

% の代わりに試すことができます\%%か??

お気に入り、

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

または

<string formatted="false" name="teststring" >The new value is %</string>
于 2013-05-30T10:55:46.777 に答える
8

これを試して

<string  name="teststring"> The new value is %1$s %% </string>
于 2013-05-30T11:12:07.200 に答える
1

これをチェックして、

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

String value = "25";
String formattedString = this.getResources().getString(R.string.teststring, mPageNumber);
于 2013-05-30T11:07:09.183 に答える
1
String value = "25";

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

今ならLog.d(TAG,formattedString); それはログに記録します

The new value is 25%
于 2015-04-13T01:29:37.970 に答える
0

次のように使用します。

String str = context.getResources().getString(R.string.teststring);
String formattedString = String.format(str, value);
于 2013-05-30T10:57:42.580 に答える