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"