Ponownie użyć parametru w String.format?


136
String hello = "Hello";

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

hello hello hello hello hello hello 

Czy zmienna hello musi być powtarzana wiele razy w wywołaniu metody format, czy też istnieje skrócona wersja, która pozwala raz określić argument, który ma zostać zastosowany do wszystkich %stokenów?

Odpowiedzi:


261

Z dokumentów :

  • Specyfikatory formatu dla typów ogólnych, znakowych i liczbowych mają następującą składnię:

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

    Opcjonalny argument_index to dziesiętna liczba całkowita wskazująca pozycję argumentu na liście argumentów. Do pierwszego argumentu odwołuje się "1$", do drugiego "2$"itd.

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


12

Musisz użyć argumentu indeksu użytkownika %[argument_index$]w następujący sposób:

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

Wynik: hello hello hello hello hello hello


4

Jednym z typowych przypadków ponownego użycia argumentu w programie String.formatjest użycie separatora (np. ";"Dla CSV lub tabulatora dla konsoli).

System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c"));
// "a ; ; ; b"

To nie jest pożądane wyjście. "c"nie pojawia się nigdzie.

Musisz najpierw użyć separatora (z %s) i używać argumentu index ( %2$s) tylko w następujących przypadkach:

System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c"));
//  "a ; b ; c"

Spacje są dodawane w celu zwiększenia czytelności i debugowania. Gdy format wydaje się być poprawny, spacje można usunąć w edytorze tekstu:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.