90
 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 が追加されるのはなぜですか?

4

4 に答える 4

143

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

  • %     = フォーマット文字列の開始
  • 4$   = 4 番目の引数 ('d')
  • 2     = 幅 2 (右揃え)
  • s     = 文字列の型
于 2009-12-16T14:47:03.750 に答える
49

2$手段は、リストの 2 番目の引数をここに置きます。前にない番号の後に$ 続きます。同様に、4$ここに 4 番目の引数を置くことを意味します。

%2$2s明確にするために、フォーマットをその部分に分解できます。

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

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

  • 2- 形式は 2 文字です

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

詳細については、ドキュメントを参照してください。

于 2009-12-16T14:46:38.477 に答える
4

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

日付と時刻を表すために使用される型の書式指定子には、次の構文があります。

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

オプションのargument_indexは、引数リスト内の引数の位置を示す 10 進整数です。最初の引数は によって参照され"1$"、2 番目の引数は"2$"などによって参照されます。 nofollow noreferrer">フォーマッタのドキュメント

于 2009-12-16T14:47:35.313 に答える
4

%: フォーマット文字列

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 文字の幅で、スペースで埋められます)

に置き換える52、次の出力が生成されます。

- d- c- b- a-

違いを見ます?:)

于 2013-04-29T09:22:03.863 に答える