2011-07-31 5 views
89
String hello = "Hello"; 

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

hello hello hello hello hello hello 

Czy cześć zmienna trzeba powtarzać kilka razy w wywołaniu metody formacie lub jest tam skróconą wersję, która pozwala określić argument kiedyś być zastosowany do wszystkich %s tokeny?Co powiesz na to, że masz wielokrotnie ten sam parametr w String.format?

Odpowiedz

189

Od the docs:

  • specyfikatorów formatu ogólnego, charakteru i typy liczbowe mają następującą składnię:

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

    Opcjonalny argument_index jest dziesiętną liczbą całkowitą wskazujące na pozycja argumentu na liście argumentów. Pierwszy argument odwołuje "1$", drugi przez "2$" itp

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

Inną opcją jest użycie względną indeksowanie: Format specifier odwołuje się do tego samego argumentu jako ostatni specyfikacją formatu.

Na przykład

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

powoduje hello hello hello hello.

+0

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

0

Jednym z typowych przypadków ponownego użycia argumentu w String.format jest separator (np. ";" dla CSV lub karta 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ć tylko indeks argument (%2$s) dla następujących wystąpień:

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

przeznaczone są dodawane dla czytelności i debugowania. Po format wydaje się być poprawne, przestrzenie mogą zostać usunięte w edytorze tekstowym:

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