Réutiliser un paramètre dans 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 

La variable hello doit-elle être répétée plusieurs fois dans l'appel à la méthode format ou existe-t-il une version abrégée qui vous permet de spécifier l'argument une fois à appliquer à tous les %sjetons?

Réponses:


261

À partir de la documentation :

  • 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' argument_index facultatif 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);


12

Vous devez utiliser l'argument d'indexation de l'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


4

Un cas courant de réutilisation d'un argument dans String.formatest celui d'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'utiliser l'argument index ( %2$s) que pour les occurrences suivantes:

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 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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.