Carey
String hello = "Hello";
String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello);
hello hello hello hello hello hello
¿El hello
la variable debe repetirse varias veces en la llamada al método de formato o existe una versión abreviada que le permite especificar el argumento una vez para que se aplique a todos los %s
fichas?
Ignacio Vázquez-Abrams
De los documentos:
Los especificadores de formato para tipos generales, de caracteres y numéricos tienen la siguiente sintaxis:
%[argument_index$][flags][width][.precision]conversion
el opcional argumento_índice 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);
Daniel
Otra opción es utilizar 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
.
-
docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dpos
– Vadzim
22 de diciembre de 2017 a las 16:08
Ahmad Al-Kurdi
Necesitas usar el argumento index %[argument_index$]
como el seguiente:
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
Un caso común para reutilizar un argumento en String.format
es con un separador (ej. ";"
para CSV o pestaña 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 por ningún lado.
Primero debe usar el separador (con %s
) y solo use 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 mejorar la legibilidad y la depuración. Una vez que el formato parezca correcto, se pueden eliminar los espacios en el editor de texto:
System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"