java string string-formatting

java - ¿Qué pasa si tienes el mismo parámetro varias veces en String.format?



string.format android (3)

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 necesita repetirse varias veces en la llamada al método de formato o hay una versión abreviada que le permite especificar el argumento una vez para ser aplicado a todos los tokens %s ?


De los documentos :

  • Los especificadores de formato para general, carácter y tipos numéricos tienen la siguiente sintaxis:

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

    El argumento opcional_index es un entero decimal que indica la posición del argumento en la lista de argumentos. El primer argumento es referenciado por "1$" , el segundo por "2$" , etc.

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


Otra opción es usar indexación relativa : el especificador de formato hace referencia al mismo argumento que el último especificador de formato.

Por ejemplo:

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

da como resultado hello hello hello hello .


Un caso común para reutilizar un argumento en String.format es con un separador (por ejemplo, ";" para CSV o tab para consola).

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

Esta no es la salida deseada. "c" no aparece en ningún lado.

Primero debe usar el separador (con %s ) y solo usar el índice de argumento ( %2$s ) para las siguientes ocurrencias:

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

Se agregan espacios para la lectura y la depuración. Una vez que el formato parece ser correcto, los espacios se pueden eliminar en el editor de texto:

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