文字列リソースファイルのformatステートメント


147

次のような通常のstrings.xmlリソースファイルで文字列を定義しています。

<string name="hello_world"> HELLO</string>

以下のようなフォーマット文字列を定義することは可能ですか

 result_str = String.format("Amount: %.2f  for %d days ",  var1, var2);

strings.xmlリソースファイル内?

特殊文字をエスケープしてみましたが、機能しません。


1
以下の方法で試すことができます:mTextView.setText(String.format( "Score:" + "%1 $ s"、run)); ここで、intの実行= 100;
ガネーシュ

回答:


264

formatted="false"XMLで使用する必要はありません。またはのように、短いバージョンではなく、完全修飾文字列フォーマットマーカーを使用する必要があります%[POSITION]$[TYPE][POSITION]は属性の位置で[TYPE]、変数のタイプです)。%s%d

Androidドキュメントからの引用:文字列のフォーマットとスタイル

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

この例では、フォーマット文字列には2つの引数%1$sがあります。は文字列と%2$d10進整数です。次のように、アプリケーションからの引数を使用して文字列をフォーマットできます。

Resources res = getResources();
String text = res.getString(R.string.welcome_messages, username, mailCount);

1
$ dを使用すると、java.util.IllegalFormatConversionException:%dがjava.lang.Double引数をフォーマットできません$ dは整数だと思います
user1634451

6
ここにすべての異なるコンバーターのリストがあります。数値タイプに適切なものを選択する必要があります。%f(浮動小数点の場合)が必要になる場合があります。 docs.oracle.com/javase/1.5.0/docs/ api / java / util / Formatter.html
LocalPCGuy 14

2
res.getString(R.string.welcome_messages、username、mailCount)が仕事をします。リソース/コンテキストのgetStringメソッドには、フォーマット機能が含まれています。
SkyOasis 2015年

104

formatted="false"文字列リソースに追加する必要があります


ここに例があります

あなたのstrings.xml

<string name="all" formatted="false">Amount: %.2f%n  for %d days</string>

あなたのコードで:

yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));

6
文字列のフォーマットに関するドキュメントによると、必要ありません。developer.android.com/guide/topics/resources/...
スクォンク

これは修正する1つの方法ですformatted="false"が、文字列がフォーマットされないことを意味する可能性があるため、混乱する可能性があります。別のソリューションを投稿しましたstackoverflow.com/a/20887690/228429
LocalPCGuy

18
String.format(getString(R.string.all), 3.12, 2)この方法で簡略化できることに注意してくださいgetString(R.string.all, 3.12, 2)
patryk.beza

このページのすべての回答に大きな問題があります。たとえば、パラメーターのすぐ隣にパーセント記号を追加する必要がある場合25%、Androidがクラッシュします。
Henrique de Sousa

2
2つの%%を含めることで、パーセント記号をエスケープできます。これは次の標準的な書式構文です。例:String.format( "Percent%d %% or as float%.2f %%"、12、12.34f); 文字列「パーセント12%またはフロート12.34%として」を生成します
LanDenLabs 2017年

14

ファイル内でstrings.xml、次のようなStringリソースを定義します。

<string name="string_to_format">Amount: %1$f  for %2$d days%3$s</string>

コード内で(Contextから継承すると仮定)、次の操作を行います。

 String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);

LocalPCGuyまたはGiovanny Farto Mの回答と比較すると、String.formatメソッドは必要ありません。)


9

Androidドキュメントからの引用:

を使用して文字列をフォーマットする必要がある場合String.format(String, Object...)は、文字列リソースにフォーマット引数を配置することで実行できます。たとえば、次のリソースの場合:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

この例では、フォーマット文字列には2つの引数%1$sがあります:は文字列と%2$d10進数です。次のように、アプリケーションからの引数を使用して文字列をフォーマットできます。

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

0

私にとっては、それはコトリンでそのように機能しました:

私のstring.xml

 <string name="price" formatted="false">Price:U$ %.2f%n</string>

私のclass.kt

 var formatPrice: CharSequence? = null
 var unitPrice = 9990
 formatPrice = String.format(context.getString(R.string.price), unitPrice/100.0)
 Log.d("Double_CharSequence", "$formatPrice")

D / Double_CharSequence:価格:U $ 99,90

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.