Reutilizar um parâmetro em 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 

A variável hello precisa ser repetida várias vezes na chamada para o método format ou existe uma versão abreviada que permite especificar o argumento uma vez a ser aplicado a todos os %stokens?

Respostas:


261

Dos documentos :

  • Os especificadores de formato para tipos geral, de caractere e numéricos têm a seguinte sintaxe:

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

    O argumento_índice opcional é um número inteiro decimal indicando a posição do argumento na lista de argumentos. O primeiro argumento é referenciado por "1$", o segundo por "2$", etc.

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


12

Você precisa do argumento do índice do usuário %[argument_index$]da seguinte maneira:

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

Resultado: hello hello hello hello hello hello


4

Um caso comum para reutilizar um argumento em String.format é com um separador (por exemplo, ";"para CSV ou guia para console).

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

Esta não é a saída desejada. "c"não aparece em lugar nenhum.

Você precisa usar o separador primeiro (com %s) e usar apenas o índice de argumentos (%2$s ) para as seguintes ocorrências:

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

Espaços são adicionados para facilitar a leitura e a depuração. Depois que o formato parecer correto, os espaços poderão ser removidos no editor de texto:

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.