私はこのような文字列を持っています:
<string name="q_title" formatted="false">Item %d of %d</string>
私は次のようにString.formatでそれを使用しています:
String log = String.format(getString(R.string.q_title), 100, 500);
これまでのところ、出力に問題はありません。
ただし、Android Studioでのコード検査では、次のことがわかります。
フォーマット文字列 'q_title'は有効なフォーマット文字列ではないため、String.formatに渡さないでください。
どうして?
あなたの文字列は
_<string name="q_title" formatted="false">Item %1$d of %2$d</string>
_
そしてコード
_String log = getString(R.string.q_title, 100, 500);
_
複数の引数がある場合は、それらを1 $、2 $ ... n $でマークする必要があります。アラビア語では、言語の順序が逆になっているため、正しく変更する方法を知っている必要があります。
getString(id, args...)
それ自体でフォーマットを実行します。
パーセントについては、次のことが私のために働いた。
<string name="score_percent">%s%%</string>
getString(R.string.score_percent,"20")
整数を扱っている場合は、sをdに置き換えます
<string name="score_percent">%d%%</string>
Blackbeltが投稿したリンク が示すように、まだこの答えを探している人にとって、文字列の正しい形式は次のようになります。
<string name="q_title">Item %1$d of %2$d</string>
すべての特殊文字をエスケープするように注意してください
最後にパーセント文字「%」をエスケープするのを忘れたため、この文字列に問題がありました。
<string name="market_variation_formatter">%s %</string>
良いエスケープ文字列は:
<string name="market_variation_formatter">%s \%</string>
文字列をフォーマットする必要がある場合は、次のサンプルリソースに示すように、フォーマット引数を文字列リソースに配置することでフォーマットできます。
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
この例では、フォーマット文字列には2つの引数があります。%1 $ sは文字列で、%2 $ dは10進数です。次に、getString(int、Object ...)を呼び出して文字列をフォーマットします。例えば:
String text = getString(R.string.welcome_messages, username, mailCount);