wcześniej widziałeś użycie metod print
I println
do drukowania ciągów na standardowe wyjście (System.out
). Ponieważ wszystkie liczby mogą być konwertowane na ciągi znaków (jak zobaczysz w dalszej lekcji), możesz użyć tych metod, aby wydrukować dowolną mieszankę łańcuchów i liczb., Język programowania Java ma jednak inne metody, które pozwalają na znacznie większą kontrolę nad wydrukiem, gdy liczby są włączone.
metody printf i formatowania
java.io
pakiet zawiera PrintStream
klasa, która ma dwie metody formatowania, które można zastąpić print
I println
. Te metody, format
I printf
, są sobie równoważne., Znany System.out
, którego używasz, jest obiektem PrintStream
, więc możesz wywołać PrintStream
metody na System.out
. W ten sposób możesz użyć format
lub printf
w dowolnym miejscu kodu, w którym wcześniej używałeś print
lub println
., Na przykład
System.out.format(.....);
składnia tych dwóch metod java.io.PrintStream
jest taka sama:
public PrintStream format(String format, Object... args)
gdzie format
jest ciągiem znaków określającym formatowanie, które ma być użyte, a args
jest listą zmiennych, które mają być wydrukowane przy użyciu tego formatowania. Prostym przykładem może być
pierwszy parametr,format
, jest łańcuchem formatowania określającym sposób formatowania obiektów w drugim parametrze,args
., Łańcuch formatowania zawiera zarówno zwykły tekst, jak i SPECYFIKATORY FORMATU, które są znakami specjalnymi formatującymi argumenty Object... args
. (Zapis Object... args
nazywa się varargs, co oznacza, że liczba argumentów może się różnić.)
SPECYFIKATORY FORMATU rozpoczynają się znakiem procentowym ( % ), a kończą konwerterem. Konwerter jest znakiem wskazującym typ argumentu, który ma być sformatowany. Pomiędzy znakiem procentowym ( % ) a konwerterem możesz mieć opcjonalne flagi i specyfikatory., Istnieje wiele konwerterów, znaczników i specyfikatorów, które są udokumentowane w java.util.Formatter
oto podstawowy przykład:
int i = 461012;System.out.format("The value of i is: %d%n", i);
%d
określa, że pojedyncza zmienna jest liczbą dziesiętną. %n
jest niezależnym od platformy znakiem nowego wiersza. Wyjście to:
The value of i is: 461012
printf
I format
metody są przeciążone., Każda z nich ma wersję o następującej składni:
public PrintStream format(Locale l, String format, Object... args)
aby wydrukować liczby w systemie Francuskim (gdzie zamiast miejsca dziesiętnego w reprezentacji liczb zmiennoprzecinkowych w języku angielskim używany jest przecinek), na przykład:
przykład
poniższa tabela zawiera listę konwerterów i znaczników, które są używane w przykładowym programie, TestFormat.java
, który następuje po tabeli.,
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 data& konwersja czasupełna nazwa miesiąca specyficzna dla danego regionu. | |
td, te | a data& konwersja czasu2-cyfrowy dzień miesiąca. td ma wiodące zera w razie potrzeby, te nie. | |
ty, tY | a data& konwersja czasuty = 2-cyfrowy rok, tY = 4-cyfrowy rok. | |
tl | a data& konwersja czasugodzina w 12-godzinnym zegarze., | |
tM | a data& konwersja czasuminuty w 2 cyfrach, z wiodącymi zerami w razie potrzeby. | |
tp | a data& konwersja czasuspecyficzne dla locale am / pm (małe litery). | |
tm | a data& konwersja czasumiesiące w 2 cyfrach, z wiodącymi zerami w razie potrzeby., | |
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 | dziesięć znaków o szerokości, z prawym uzasadnieniem, z trzema miejscami po przecinku. |
poniższy program pokazuje niektóre formatowanie, które można zrobić z format
. Wyjście jest pokazane w podwójnych cudzysłowach w osadzonym komentarzu:
format
Iprintf
. Więcej szczegółów można znaleźć w Basic I/O
w sekcji Essential trail, na stronie „formatowanie”.,używanie
String.format
do tworzenia łańcuchów jest pokryte łańcuchami. Klasa DecimalFormat
możesz użyć klasy java.text.DecimalFormat
do kontrolowania wyświetlania początkowych i końcowych zer, przedrostków i przyrostków, separatorów grupowania (tysięcy) i separatora dziesiętnego. DecimalFormat
oferuje dużą elastyczność w formatowaniu liczb, ale może sprawić, że Twój kod będzie bardziej złożony.,
poniższy przykład tworzy obiektDecimalFormat
,myFormatter
, przekazując łańcuch wzorca do konstruktoraDecimalFormat
., Metoda format()
, która DecimalFormat
dziedziczy z NumberFormat
, jest następnie wywoływana przez myFormatter
przyjmuje double
wartość jako argument i zwraca sformatowaną liczbę w łańcuchu znaków:
oto przykładowy program, który ilustruje użycie DecimalFormat
:
wyjście to:
123456.789 ###,###.### 123,456.789123456.789 ###.## 123456.79123.78 000000.000 000123.78012345.67 $###,###.### $12,345.67
poniższa tabela wyjaśnia każdą linię wyjścia.