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
トークン?
ドキュメント から:
一般、文字、および数値型の形式指定子の構文は次のとおりです。
%[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);
別のオプションはrelative indexingを使用することです:フォーマット指定子は最後のフォーマット指定子と同じ引数を参照します。
例えば:
String.format("%s %<s %<s %<s", "hello")
結果はhello hello hello 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
String.format
で引数を再利用する一般的なケースの1つは、区切り文字を使用することです(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"