Muss ich für jedes identische Argument in String.format eine Variable angeben?

Lesezeit: 2 Minuten

Benutzeravatar von Carey
Carey

String hello = "Hello";

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

hello hello hello hello hello hello 

Tut das hello muss im Aufruf der format-Methode mehrmals wiederholt werden oder gibt es eine Kurzversion, mit der Sie das Argument einmal angeben können, um es auf alle anzuwenden %s Token?

Benutzeravatar von Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Aus die Dokumente:

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

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

Die Wahl argument_index ist eine Dezimalzahl, die die Position des Arguments in der Argumentliste angibt. Das erste Argument wird von referenziert "1$"die zweite von "2$"etc.

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

Daniels Benutzeravatar
Daniel

Eine weitere Option ist die Verwendung relative Indizierung: Der Formatbezeichner verweist auf dasselbe Argument wie der letzte Formatbezeichner.

Zum Beispiel:

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

ergibt sich hello hello hello hello.

Benutzeravatar von Ahmad Al-Kurdi
Ahmad Al-Kurdi

Sie müssen das Indexargument verwenden %[argument_index$] wie die folgenden:

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

Ein häufiger Fall für die Wiederverwendung eines Arguments in String.format ist mit einem Trennzeichen (zB ";" 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" taucht nirgends auf.

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

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 erscheint, 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"

1433570cookie-checkMuss ich für jedes identische Argument in String.format eine Variable angeben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy