2009-12-16 10 views
57
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é es un 2 anexa a $?

Respuesta

88

El 2 no tiene nada que ver con el $:

  • %       =   Inicio de cadena de formato
  • 4$   =   cuarto argumento ('d')
  • 2       =   ancho de dos (derecho t-alineados)
  • s       =   tipo de cadena
+0

argumento * no se puede crear y editar porque la edición es demasiado pequeña –

35

2$ significa poner el segundo argumento de la lista aquí. El $sigue un número que no le precede. Del mismo modo, 4$ significa poner el cuarto argumento aquí.

Para aclarar, podemos descomponer el formato %2$2s en sus partes:

  • % - indica que se trata de una cadena de formato

  • 2$ - muestra el segundo argumento de valor debe ser puesto aquí

  • 2 - el formato tiene dos caracteres de longitud

  • s - formatear el valor como una cadena

Puede encontrar más información in the documentation.

+0

¿Por qué downvoted? Es una respuesta correcta. – Joey

+0

¿Vázulo táctico? –

+0

Bueno, ahora tienes un voto alternativo táctico, entonces :-) – Joey

1

Esos son argumentos posicionales donde %4$2s señales para formatear la cuarto argumento como una cadena con un ancho de 2. Esto es especialmente útil cuando se proporciona cuerdas para la localización donde los argumentos necesitan ser reordenados sin tocar el código fuente.

Los especificadores de formato para los tipos que se utilizan para representa fechas y horas tienen la siguiente sintaxis:

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

El opcional argument_index es un entero decimal que indica la posición del argumento en la lista de argumentos. El primer argumento se referencia en "1$", el segundo en "2$", etc.- Formatter documentation

+0

Aún así, me gusta el formato de .NET mejor ya que hacen la posición de los argumentos mucho más clara. – Joey

1

4 $: cuarto argumento de valor %: formato de cadena 2: distancia (longitud del argumento) s: es un formato de cadena

por 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); 

una salida de:

// espaciamiento de 5 caracteres entre dos caracteres

d   c   b   a 

y la sustitución de 5 con 2, producirá el siguiente resultado:

d c b a

Ver la diferencia? :)