回答:
ドキュメントから:
一般、文字、数値タイプのフォーマット指定子の構文は次のとおりです。
%[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);
%[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
で引数を再利用する一般的なケースの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"