web-dev-qa-db-ja.com

Javaフォーマット文字列の$を理解する

 StringBuilder sb = new StringBuilder();
 // Send all output to the Appendable object sb
 Formatter formatter = new Formatter(sb, Locale.US);

 // Explicit argument indices may be used to re-order output.
 formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
 // -> " d  c  b  a"

この場合、なぜ$に2が追加されるのですか?

75
andandandand

2$とは関係ありません:

  • % =フォーマット文字列の開始
  • 4$ = 4番目の引数( 'd')
  • 2 = two 2の幅(右揃え)
  • s =文字列のタイプ
120
Sven Lilienthal

2$は、リストの2番目の引数をここに置くことを意味します。 $follows数字の前にない。同様に、4$は、ここに4番目の引数を置くことを意味します。

明確にするために、%2$2sその部分にフォーマット:

  • %-これがフォーマット文字列であることを示します

  • 2$-2番目の値の引数をここに配置する必要があることを示します

  • 2-形式は2文字です

  • s-値を文字列としてフォーマット

より多くの情報を見つけることができます ドキュメントで

47
Dave Webb

%:フォーマット文字列

4$:4番目の値の引数

2:幅(引数が出力されるときの長さ)

s:文字列引数の変換です

たとえば、次のスニペット:

StringBuffer sb=new StringBuffer();

Formatter formatter=new Formatter(sb,Locale.UK);

formatter.format("-%4$5s-%3$5s-%2$5s-%1$5s-", "a", "b", "c", "d");

System.out.println(sb);

次の出力を生成します。

-    d-    c-    b-    a-

(引数ごとに5文字の幅、スペースでパディング)

5 with 2、次の出力を生成します。

- d- c- b- a-

違いを見ます? :)

3
Rahul Mishra

これらは、%4$2sfourth引数を幅2の文字列としてフォーマットするように指示する位置引数です。これは、ローカライズ用の文字列を提供するときに特に役立ちます。ソースコードに触れずに引数を並べ替える必要がある場合。

日付と時刻を表すために使用される型の形式指定子の構文は次のとおりです。

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

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

3
Joey