Riutilizzare un parametro in 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 variabile hello deve essere ripetuta più volte nella chiamata al metodo format o esiste una versione abbreviata che consente di specificare l'argomento una volta da applicare a tutti i %stoken?

Risposte:


261

Dai documenti :

  • Gli identificatori di formato per tipi generali, di carattere e numerici hanno la sintassi seguente:

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

    L' argomento_indice opzionale è un numero intero decimale che indica la posizione dell'argomento nell'elenco degli argomenti. Il primo argomento è referenziato da "1$", il secondo da "2$", ecc.

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


12

È necessario indicizzare l'argomento dell'utente %[argument_index$]come segue:

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

Risultato: hello hello hello hello hello hello


4

Un caso comune per il riutilizzo di un argomento String.formatè con un separatore (ad es. ";"Per CSV o tab per console).

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

Questo non è l'output desiderato. "c"non appare da nessuna parte.

È necessario utilizzare prima il separatore (con %s) e utilizzare solo l'argomento index ( %2$s) per le seguenti occorrenze:

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

Gli spazi vengono aggiunti per la leggibilità e il debug. Una volta che il formato sembra essere corretto, gli spazi possono essere rimossi nell'editor di testo:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.