Parameter in String.format wiederverwenden?


136
String hello = "Hello";

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

hello hello hello hello hello hello 

Muss die Hallo-Variable beim Aufruf der Formatierungsmethode mehrmals wiederholt werden, oder gibt es eine Kurzversion, mit der Sie das Argument angeben können, das einmal auf alle %sToken angewendet werden soll ?

Antworten:


261

Aus den Dokumenten :

  • Die Formatbezeichner für allgemeine, Zeichen- und numerische Typen haben die folgende Syntax:

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

    Der optionale Argumentindex ist eine Dezimalzahl, die die Position des Arguments in der Argumentliste angibt. Das erste Argument wird von "1$", das zweite von "2$"usw. referenziert .

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


12

Sie müssen das Argument %[argument_index$]des Benutzerindex wie folgt verwenden:

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

Ergebnis: hello hello hello hello hello hello


4

Ein häufiger Fall für die Wiederverwendung eines Arguments in String.formatist ein Trennzeichen (z. B. ";"für CSV oder Tab für Konsole).

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

Dies ist nicht die gewünschte Ausgabe. "c"erscheint nirgendwo.

Sie müssen zuerst das Trennzeichen (mit %s) und nur das Argument index ( %2$s) für die folgenden Vorkommen verwenden:

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

Leerzeichen werden zur besseren Lesbarkeit und zum Debuggen hinzugefügt. Sobald das Format korrekt zu sein scheint, können Leerzeichen im Texteditor entfernt werden:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.