2011-07-31 11 views

答えて

189

the docsより:

  • フォーマット一般的な、文字の指定子、および数値型は、以下の構文を有する:

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

    任意のargument_indexを示す10進整数であります引数リスト内の引数の位置。最初の引数は、別のオプションが相対インデックス使用することです

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

など、"2$"により、第2、"1$"によって参照される:書式指定子を最後の書式指定子と同じ引数を参照します。例えば

hello hello hello hello

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

結果。

+0

https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dpos – Vadzim

0

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" 
関連する問題