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ć PrintStreammetody 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
printfI 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 myFormatterprzyjmuje 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.