String.formatのパラメーターを再利用しますか?


136
String hello = "Hello";

String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello);

hello hello hello hello hello hello 

hello変数は、formatメソッドの呼び出しで複数回繰り返す必要がありますか、またはすべての%sトークンに適用される引数を1回指定できる簡略版はありますか?

回答:


261

ドキュメントから:

  • 一般、文字、数値タ​​イプのフォーマット指定子の構文は次のとおりです。

        %[argument_index$][flags][width][.precision]conversion

    オプションのargument_indexは、引数リスト内の引数の位置を示す10進整数です。最初の引数はによって参照され"1$"、2番目はによって参照されます"2$"

String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);


12

%[argument_index$]次のようにインデックス引数を使用する必要があります。

String hello = "Hello";
String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);

結果: hello hello hello hello hello hello


4

で引数を再利用する一般的なケースの1つString.formatは、セパレーター(";"CSVの場合やコンソールのタブ)です。

System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c"));
// "a ; ; ; b"

これは望ましい出力ではありません。"c"どこにも表示されません。

最初に区切り文字(%s)を使用する必要があり、引数インデックス(%2$s)は次の場合にのみ使用します。

System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c"));
//  "a ; b ; c"

読みやすさとデバッグのためにスペースが追加されています。形式が正しいように見えたら、テキストエディタでスペースを削除できます。

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.