Massimo Caliman
Massimo Caliman
1 min read

Categories

  • java

Tags

  • Java
  • String

Languages

  • Italian

 Alla data in cui scrivo, molti non sono ancora passati nè alla versione 8 di Java nè tantomeno alla 7, per chi non lo sapesse già la versione 7 del JDK, offre il metodo

String.format(String format, Object... args)

Un implementazione direi completa del caro e vecchio printf, non stampa di per sè ma ci permette di applicare la formattazione alla stringa che andremo poi a stampare tramite i classici metodi statici print() e println() di System.out.

Già questo basterebbe per togliersi un po’ di pigrizia ed eventuali vincoli e passare almeno alla versione 7 di Java. Vediamo la segnature riportata sopra, abbiamo i parametri format e la lista variabile di argomenti args che rappresentano le variabili che passeremo in successione e che saranno formattate. Riguardo il metodo format dalla documentazione ufficiale Oracle abbiamo la seguente descrizione

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

dove l’argomento opzionale argument_index è un intero che indica la posizione dell’argomento nella lista stessa. Il primo argomento e referenziato con 1$ il secondo con 2$ e così via, piuttosto facile e intuitivo anche se non si ha esperienza in C o C++.

flags opzionale anch’esso è il set di caratteri che modifica il formato dell’output i flag validi dipendono dal valore per l’argomento conversion. width opzionale intero non negativo indica il numero minimo di caratteri da scrivere sull’otput. precision intero non negativo è utilizzato per limitare il numero di caratteri e il comportamento specifico è in base a valore di conversion. Come visibile conversion è l’unico argomento obbligatorio ed indica la formattazione dipende dal tipo del dato.

Il meccanismo è lo stesso utilizzato nel linguaggio C un esempio può comunque chiarire meglio le idee, l’istruzione

String.format ( "%,6.2f", 352.100)

formatta il nostro numero come un float (type), la virgola come separatore della parte decimale e precisione come da parametrizzazione data.

352,10

Ovviamente tutto ciò non è limitato ai tipi di dato numerici ma vale anche per date e stringhe.