String hello = "Hello";
String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello);
hello hello hello hello hello hello
La variable hello doit-elle être répétée plusieurs fois dans l'appel de la méthode de formatage ou existe-t-il une version abrégée qui vous permet de spécifier l'argument à appliquer une fois à tous les %s
jetons?
De les docs :
Les spécificateurs de format pour les types général, caractère et numérique ont la syntaxe suivante:
%[argument_index$][flags][width][.precision]conversion
L'option argument_index est un entier décimal indiquant la position de l'argument dans la liste d'arguments. Le premier argument est référencé par
"1$"
, le second par"2$"
, etc.
String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);
Une autre option consiste à utiliser indexation relative: le spécificateur de format fait référence au même argument que le dernier spécificateur de format.
Par exemple:
String.format("%s %<s %<s %<s", "hello")
résulte en hello hello hello hello
.
Vous devez utiliser l'argument d'index utilisateur %[argument_index$]
comme suit :
String hello = "Hello";
String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);
Résultat : hello hello hello hello hello hello
Un cas courant de réutilisation d'un argument dans String.format
est avec un séparateur (par exemple, ";"
pour CSV ou onglet pour console).
System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c"));
// "a ; ; ; b"
Ce n'est pas la sortie souhaitée. "c"
n'apparaît nulle part.
Vous devez d’abord utiliser le séparateur (avec %s
) et n’utilise que l’argument index (%2$s
) pour les événements suivants:
System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c"));
// "a ; b ; c"
Des espaces sont ajoutés pour la lisibilité et le débogage. Une fois que le format semble être correct, les espaces peuvent être supprimés dans l'éditeur de texte:
System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"