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);
この例では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" を設定しないでください。