In precedenza è stato visto l’uso dei metodiprint
eprintln
per la stampa di stringhe su standard output (System.out
). Poiché tutti i numeri possono essere convertiti in stringhe (come vedrai più avanti in questa lezione), puoi usare questi metodi per stampare una miscela arbitraria di stringhe e numeri., Il linguaggio di programmazione Java ha altri metodi, tuttavia, che consentono di esercitare molto più controllo sull’output di stampa quando i numeri sono inclusi.
I metodi printf e format
Il pacchettojava.io
include una classePrintStream
con due metodi di formattazione che è possibile utilizzare per sostituireprint
eprintln
. Questi metodi,format
eprintf
, sono equivalenti tra loro., Il familiare System.out
che hai utilizzato è un PrintStream
oggetto, quindi puoi richiamare PrintStream
metodi su System.out
. Pertanto, è possibile utilizzareformat
oprintf
ovunque nel codice in cui è stato precedentemente utilizzatoprint
oprintln
., Per esempio,
System.out.format(.....);
La sintassi per questi due java.io.PrintStream
metodi è lo stesso:
public PrintStream format(String format, Object... args)
dove format
è una stringa che specifica la formattazione per essere utilizzato e args
è una lista di variabili di stampa utilizzando la formattazione. Un semplice esempio potrebbe essere
Il primo parametro,format
, è una stringa di formato che specifica come gli oggetti nel secondo parametro,args
, devono essere formattati., La stringa di formato contiene testo normale e specificatori di formato, che sono caratteri speciali che formattano gli argomenti di Object... args
. (La notazioneObject... args
è chiamata varargs, il che significa che il numero di argomenti può variare.)
Gli specificatori di formato iniziano con un segno di percentuale ( % ) e terminano con un convertitore. Il convertitore è un carattere che indica il tipo di argomento da formattare. Tra il segno di percentuale ( % ) e il convertitore puoi avere flag e specificatori opzionali., Ci sono molti convertitori, flag e specificatori, che sono documentati in java.util.Formatter
Ecco un esempio di base:
int i = 461012;System.out.format("The value of i is: %d%n", i);
Il %d
specifica che la singola variabile è un numero intero decimale. Il %n
è un carattere di nuova riga indipendente dalla piattaforma. L’output è:
The value of i is: 461012
I metodi printf
e format
sono sovraccaricati., Ognuno ha una versione con la seguente sintassi:
public PrintStream format(Locale l, String format, Object... args)
Per stampare numeri nel sistema francese (dove viene utilizzata una virgola al posto del punto decimale in inglese rappresentazione dei numeri in virgola mobile), per esempio, utilizzare:
Esempio
La seguente tabella elenca alcuni dei convertitori e gli indicatori che vengono utilizzati nel programma di esempio, TestFormat.java
, che segue la tabella.,
Converter | Flag | Explanation |
---|---|---|
d | A decimal integer. | |
f | A float. | |
n | A new line character appropriate to the platform running the application. You should always use %n , rather than \n ., |
|
tB | A date& time conversionlocale-specific nome completo del mese. | |
td, te | A date& time conversion2-digit giorno del mese. td ha zeri iniziali se necessario, te no. | |
ty, tY | Una data& conversione temporalety = anno a 2 cifre, tY = anno a 4 cifre. | |
tl | Una data& tempo di conversioneora in orologio di 12 ore., | |
tM | Una data& conversione del tempominuti in 2 cifre, con zeri iniziali se necessario. | |
tp | Una data& conversione di tempolocale-specifica am / pm (minuscolo). | |
tm | Una data& conversione temporalemesi in 2 cifre, con zeri iniziali se necessario., | |
tD | A date & time conversiondate as %tm%td%ty | |
08 | Eight characters in width, with leading zeroes as necessary. | |
+ | Includes sign, whether positive or negative. | |
, | Includes locale-specific grouping characters. | |
– | Left-justified.. | |
.3 | Three places after decimal point. | |
10.,3 | Dieci caratteri in larghezza, giustificati a destra, con tre punti dopo il punto decimale. |
Il seguente programma mostra alcune delle formattazione che si possono fare con format
. L’output è mostrato tra virgolette nel commento incorporato:
format
e printf
. Ulteriori dettagli possono essere trovati nella sezioneBasic I/O
del percorso essenziale, nella pagina “Formattazione”.,Utilizzando
String.format
per creare stringhe è coperto in stringhe. La classe DecimalFormat
È possibile utilizzare la classejava.text.DecimalFormat
per controllare la visualizzazione di zeri iniziali e finali, prefissi e suffissi, separatori di raggruppamento (migliaia) e separatore decimale. DecimalFormat
offre una grande flessibilità nella formattazione dei numeri, ma può rendere il codice più complesso.,
L’esempio che segue crea un oggettoDecimalFormat
,myFormatter
, passando una stringa di pattern al costruttoreDecimalFormat
., format()
metodo DecimalFormat
eredita da NumberFormat
, viene quindi richiamata da myFormatter
accetta un double
valore come argomento e restituisce il numero formattato in una stringa:
Ecco un programma di esempio che illustra l’utilizzo di DecimalFormat
:
L’output è:
123456.789 ###,###.### 123,456.789123456.789 ###.## 123456.79123.78 000000.000 000123.78012345.67 $###,###.### $12,345.67
La seguente tabella illustra per ogni riga di output.