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"
W takim przypadku, dlaczego 2 jest dołączane do $?
Te
2$
środki umieścić drugi argument z listy tutaj.$
Następujący numer nie poprzedza go. Podobnie4$
oznacza tutaj przedstawiony argument.Aby wyjaśnić, możemy podzielić
%2$2s
format na części:%
- wskazuje, że jest to ciąg formatu2$
- pokazuje, że należy tu umieścić drugi argument wartości2
- format ma dwa znakis
- sformatuj wartość jako ciągWięcej informacji można znaleźć w dokumentacji .
źródło
Są to argumenty pozycyjne, w których
%4$2s
sygnały formatowania czwartego argumentu jako łańcucha o szerokości 2. Jest to szczególnie przydatne, gdy podaje się łańcuchy do lokalizacji, gdzie argumenty muszą zostać uporządkowane bez dotykania kodu źródłowego.źródło
%
: ciąg formatu4$
: czwarty argument wartości2
: width (długość, gdy wypisywany jest argument)s
: to konwersja argumentów łańcuchowychna przykład następujący fragment:
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);
daje wynik:
(szerokość 5 znaków na argument, uzupełnione spacjami)
i zastąpienie
5
przez2
, da następujący wynik:Zobacz różnicę? :)
źródło