StringBuilder sb = new StringBuilder();
// Send all output to the Appendable object sb
Formatter formatter = new Formatter(sb, Locale.US);
// Explicit argument indices may be used to re-order output.
formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
// -> " d c b a"
En este caso, ¿por qué se agrega un 2 a $?
Los
2$
medios ponen aquí el segundo argumento de la lista. El$
sigue un número que no lo precede. De manera similar,4$
significa poner el cuarto argumento aquí.Para aclarar, podemos desglosar el
%2$2s
formato en sus partes:%
- indica que se trata de una cadena de formato2$
- muestra que el segundo argumento de valor debe colocarse aquí2
- el formato tiene dos caracteress
- formatee el valor como una cadenaPuede encontrar más información en la documentación .
fuente
Esos son argumentos posicionales donde las
%4$2s
señales para formatear el cuarto argumento como una cadena con ancho 2. Esto es especialmente útil cuando se proporcionan cadenas para la localización donde los argumentos deben reordenarse sin tocar el código fuente.fuente
%
: cadena de formato4$
: argumento del cuarto valor2
: ancho (largo cuando se imprime el argumento)s
: es una conversión de argumento de cadenapor ejemplo, el siguiente fragmento:
StringBuffer sb=new StringBuffer(); Formatter formatter=new Formatter(sb,Locale.UK); formatter.format("-%4$5s-%3$5s-%2$5s-%1$5s-", "a", "b", "c", "d"); System.out.println(sb);
produce una salida de:
(ancho de 5 caracteres por argumento, relleno con espacios)
y reemplazando
5
con2
, producirá el siguiente resultado:¿Ver la diferencia? :)
fuente