2009-12-16 5 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" 

In questo caso, perché un 2 è stato aggiunto a $?

risposta

88

Il 2 non ha nulla a che fare con il $:

  • %       =   Inizio della stringa di formato
  • 4$   =   quarto argomento ('d')
  • 2       =   larghezza di due (righ t-allineata)
  • s       =   tipo di stringa
+0

* non può essere creato e modificato perché la modifica è troppo piccola –

35

Il 2$ significa mettere il secondo argomento dalla lista qui. Lo $segue un numero non lo precede. Allo stesso modo, 4$ significa mettere qui il quarto argomento.

Per chiarire, siamo in grado di abbattere il formato %2$2s nelle sue parti:

  • % - indica questa è una stringa di formato

  • 2$ - mostra il secondo argomento valore deve essere messo qui

  • 2 - il formato è lungo due caratteri

  • s - formattare il valore come una stringa

È possibile trovare maggiori informazioni in the documentation.

+0

Perché down down? È una risposta corretta – Joey

+0

Downvoting tattico? –

+0

Bene, ora hai un uptote tattico, quindi :-) – Joey

1

Quelli sono argomenti posizionali dove %4$2s segnali per formattare il quarto argomento come stringa con larghezza 2. Ciò è particolarmente utile quando si forniscono stringhe per la localizzazione in cui gli argomenti devono essere riordinati senza toccare il codice sorgente.

Gli identificatori di formato per i tipi che vengono utilizzati per rappresenta date e le ore hanno la seguente sintassi:

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

opzionale argument_index è un numero intero che indica la posizione decimale dell'argomento nell'elenco degli argomenti. Il primo argomento è riferito allo "1$", il secondo allo "2$", ecc.- Formatter documentation

+0

Ancora, mi piacciono le stringhe di formato di .NET meglio perché rendono la posizione degli argomenti molto più chiara. – Joey

1

4 $: argomenti quarto valore %: formato stringa 2: spaziatura (lunghezza dell'argomento) s: è un formato stringa

per esempio, il seguente frammento:

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

un'uscita:

// spaziatura di 5 caratteri tra due caratteri

d   c   b   a 

e sostituendo 5 con 2, produrrà il seguente output:

d c b a

Vedere la differenza? :)