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