Ein paar (hoffentlich hilfreiche) Hinweise zum printf-Befehl von Java (Version 5.0) und zum PrintfApplet

Inhaltsverzeichnis
-------------------------------------------------------------------------------------------------------
1. Was leisten die printf-Methoden?     7. Struktur eines Formatstrings       13. Zeichen
2. Erste Schritte mit dem PrintfApplet  8. Struktur eines Umwandlungsbefehls  14. Zeitwerte
3. Schalter                             9. Mindestbreite                      15. Umwandlungsbuchstaben
4. Datums- und Zeitangaben             10. Genauigkeit                        16. Zusatzbuchstabe
5. Lokalitäten (Locale-Objekte)        11. Ganzzahlen                         17. Über das PrintfApplet
6. Den Formatstring direkt editieren   12. Bruchzahlen
-------------------------------------------------------------------------------------------------------

1. Was leisten die printf-Methoden?

Mit den Methoden namens System.out.printf kann man Daten formatieren und ausgeben. Formatieren kann hier z. B. Folgendes bedeuten:

Inhaltsverzeichnis

Als Füllzeichen werden normalerweise Blanks (' ') verwendet (wegen Ausnahmen siehe Schalter 0). In den folgenden Beispielen werden in der Spalte Ausgabe Füllzeichen nicht durch Blanks, sondern durch grau hinterlegte Punkte ('.') dargestellt, damit man sie besser erkennen und zählen kann. Anstelle des langen Namens System.out.printf wird nur der Kurzname printf notiert.

Beispiele:

 printf-Befehl   Ausgabe   Kommentar 
 printf("Insg. %d Euro %d Cent", 15, 20); 
 printf("%5d Euro", 123);  
 printf("%8d Dollar", 123);  
 printf("%-8d Cent", 123);  
 printf("%3d $", 12345);  
 printf("Nr. %d", 255);  
 printf("Nr. %o", 255);  
 printf("Nr. %h", 255);  
 printf("Euro %.2f", 34.565);  
 printf("Euro %7.2f", 34.564);  
 printf("%5tT", new Calendar());  
 printf("%5tF", new Calendar());  
 Insg. 15 Euro 20 Cent 
 ..123 Euro  
 .....123 Dollar  
 123..... Cent  
 12345 $  
 Nr. 255  
 Nr. 377  
 Nr. ff  
 Euro 34.57  
 Euro ..34.56  
 19:47:19  
 2004-10-09  
 dezimal  
 Mindestbreite 5, dezimal  
 Mindestbreite 8, dezimal  
 linksbündig, Mindestbreite 8, dezimal 
 Mindestbreite 3 (tatsäch. Breite 5)  
 dezimal  
 oktal  
 hexadezimal  
 2 Nachpunktstellen  
 Mindestbreite 7, 2 Nachpunktstellen  
 Std:Min:Sek  
 Jahr-Monat-Tag  
Inhaltsverzeichnis


2. Erste Schritte mit dem PrintfApplet

Das PrintfApplet führt immer den print-Befehl aus, der im Textfenster printf-Befehl angezeigt wird. Dieser Befehl formatiert den Wert einer Variablen namens dora und gibt ihn aus. Der Benutzer kann wählen bzw. eingeben:

Zu Beginn empfiehlt es sich, folgende Fragen in der angegebenen Reihenfolge zu beantworten:

  1. Zu welchem Typ soll die Variable dora gehören? Klicken Sie einen entsprechenden Typenknopf an (im obersten Rahmen mit Knöpfen).

  2. Welchen Wert soll die Variable dora haben? Geben Sie ein entsprechendes Literal in das Textfenster Wert von dora ein. String- und char-Literale müssen ohne Anführungszeichen eingegeben werden.

  3. Wählen Sie einen Umwandlungsbuchstaben für den Formatstring, indem Sie einen entsprechenden Knopf anklicken. Mit diesem Buchstaben legen Sie die Formatierung weitgehend fest. Bestimmte Umwandlungsbuchstaben vertragen sich nur mit Werten bestimmter Typen. Z.B. kann man die Buchstaben s, b und h auf Daten aller Typen anwenden, die Buchstaben c und C aber nur auf char- und Character-Werte. Wenn Sie einen unverträglichen Buchstaben anklicken, erscheint im Textfenster Ausgabe eine entsprechende Fehlermeldung und Sie sollten einen anderen Umwandlungsbuchstaben probieren.

  4. Legen Sie eine Mindestbreite und Genauigkeit fest (mit den entsprechend beschrifteten Zahlen-Eingabefenstern). Wenn Sie die Zahl -1 wählen oder eingeben, wird keine Zahl in den Formatstring des printf-Befehls übernommen.

Beispiel 1: 1. Wählen Sie den Typ byte (durch Anklicken des entsprechenden Knopfes im Rahmen Typ von dora). 2. Geben Sie im Textfenster Wert das Literal 123 ein. 3. Wählen Sie als Umwandlungsbuchstaben d (im Rahmen Umwandlungsbuchstaben (für den Formatstring), Unterrahmen Für Ganzzahlen). 4. Wählen Sie als Mindestbreite 5 und als Genauigkeit -1 (beim Formatieren von Ganzzahlen darf man keine Genauigkeit angeben).

Beispiel 2: Vergrößern Sie jetzt die Mindestbreite von 5 auf 6, 7, 8 etc. Wählen Sie im Rahmen Schalter (für den Formatstring) das Minuszeichen. Wählen Sie das Minuszeichen mehrmals an und ab und beobachten Sie, wie die Ausgabe sich dadurch verändert.

Beispiel 3: 1. Wählen Sie den Typ float. 2. Geben Sie im Textfenster Wert das Literal 12.3456 ein. 3. Wählen Sie den Umwandlungsbuchstaben f. 4. Wählen Sie als Mindestbreite 8 und als Genauigkeit 5. Vermindern Sie dann die Genauigkeit auf 4, 3, 2, 0, -1 und beobachten Sie, wie die Ausgabe sich dadurch verändert.

Inhaltsverzeichnis


3. Schalter

Es gibt insgesamt sieben Schalterzeichen, von denen man im Prinzip beliebig viele (0 bis 7) auswählen kann. Allerdings vertragen sich bestimmte Schalter nicht miteinander oder nicht mit bestimmten Typen oder nicht mit bestimmten Umwandlungsbuchstaben. Wenn Sie unverträgliche Schalter wählen, erscheint im Textfenster Ausgabe eine entsprechende Fehlermeldung. Die Schalter müssen (in beliebiger Reihenfolge) unmittelbar nach dem Prozentzeichen % am Anfang eines Umwandlungsbefehls und vor allen weiteren Angaben stehen. Sie haben meistens die folgenden Wirkungen:

Schalter Wirkung
+ (Ein Pluszeichen) Positive Zahlen beginnen mit +, negative mit -.
( (Eine öffnende runde Klammer) Positive Zahlen erscheinen ohne Vorzeichen, negative erscheinen in runde Klammern eingefasst.
' ' (Ein Blankzeichen) Positive Zahlen beginnen mit einem Blankzeichen, negative mit -.
- (Ein Minuszeichen) Daten werden linksbündig ausgerichtet (nur sinnvoll, wenn im Formatstring gleichzeitig eine Mindestbreite angegeben wurde).
0 (Eine Null) Zum Verlängern von Daten auf die Mindestbreite werden (anstelle der normalen Blankzeichen) Nullen genommen.
, (Ein Komma) Die Vorpunktstellen von Zahlen werden 'gruppiert' d.h. 3er-Gruppen von Ziffern werden durch ein spezielles Zeichen voneinander getrennt. Das Zeichen ist abhängig von der Lokalität.
# (Ein Nummernzeichen) Die Daten werden auf eine 'alternative' Weise formatiert. Dieser Schalter hat nur in wenigen Fällen eine Wirkung (z.B. zusammen mit den Umwandlungsbuchstaben x, X, o und O für Ganzzahlen).

Inhaltsverzeichnis

4. Datums- und Zeitangaben

Mit den Umwandlungsbuchstaben t und T (wie time) kann man Werte der Typen Calendar, long und Long als Datums- und Zeitangaben formatieren. Werte der Typen long und Long werden dabei als die Anzahl der Millisekunden interpretiert, die seit dem 01.01.1970 (dem Beginn unserer Epoche) vergangen sind.

Wenn man einen der Umwandlungsbuchstaben t oder T wählt, kann (und muss) man auch noch einen Zusatzbuchstaben wählen (im Rahmen Zusatzbuchstaben für ... ganz unten im Applet). Mit dem Zusatzbuchstaben legt man fest, welche Teile einer Datums- und Zeitangabe ausgegeben werden sollen. Die entsprechenden Knöpfe sind alle mit ToolTips versehen.

Wenn man als Typ Calendar gewählt hat, darf man als Wert jetzt oder now oder ein Ganzzahlliteral in das Textfenster Wert eingeben. Die Worte bezeichnen ein Calendar-Objekt, welches den aktuellen Zeitpunkt (jetzt!) beschreibt. Ganzzahlliterale werden als long-Werte eingelesen und dann formatiert.

Die Formatierung von Datums- und Zeitangaben ist abhängig von der Lokalität (siehe die Knöpfe im Rahmen Lokalitäten des Applets).

Inhaltsverzeichnis


5. Lokalitäten (Locale-Objekte):

Es gibt zwei Methoden namens System.out.printf mit folgenden Profilen:

1. System.out.printf(String formatString, Object... zuFormatierendeParameter);

2. System.out.printf(Locale lokal, String formatString, Object... zuFormatierendeParameter);

Ein Locale-Objekt beschreibt unter anderem die speziellen Bräuche (eines Landes oder einer Region) für das Formatieren von Zahlen und von Datums- und Zeitangaben.

Mit den entsprechenden Knöpfen kann man eine bestimmte Lokalität (z.B. Italy oder Germany oder US etc.) wählen. Es wird dann die zweite printf-Methode mit dem entsprechenden Locale-Objekt aufgerufen. Wenn man den Knopf ohne lokal wählt, wird die erste printf-Methode (die ohne Locale-Parameter) aufgerufen.

Unterschiede zwischen verschiedenen Lokalitäten kann man z.B. in den folgenden Fällen beobachten:

Beim Formatieren von Zahlen. Probieren Sie z.B. den Wert 12345678 vom Typ int, den Umwandlungsbuchstaben d, den Schalter Komma ',' (zum Gruppieren der Vorpunktstellen), die Genauigkeit -1 und nacheinander die Lokalitäten ohne lokal, Germany und France.

Beim Formatieren von Datums- und Zeitangaben. Probieren Sie z.B. den Wert jetzt, den Typ Calendar, den Umwandlungsbuchstaben t, den Zusatzbuch- staben c und die Lokalitäten ohne lokal, Germany, Italy und France. Die Lokalitäten Japan und Korea funktionieren nur dann vollständig, wenn man einen Unicode-Font installiert hat (weil Japanische/Chinesische bzw. Koreanische Zeichen ausgegeben werden müssen).

Inhaltsverzeichnis


6. Den Formatstring direkt editieren:

Im Textfenster printf-Befehl wird immer der aktuelle printf-Befehl (der gerade ausgeführt wurde) angezeigt. Normalerweise verändert man den Formatstring in diesem printf-Befehl indirekt, indem man verschiedene Knöpfe anklickt. Man kann den Formatstring aber auch (im Textfenster printf-Befehl) direkt editieren. Dazu muss man den Wahlknopf Formatstring ... direkt editieren (etwa in der Mitte des Fensters links) anklicken. Man darf dann aber nur den Formatstring verändern (den Text zwischen den doppelten Anführungszeichen), die übrigen Teile des printf-Befehls sind gegen Veränderungen geschützt.

Achtung: Wenn man den Formatstring direkt editiert hat und dann den Knopf Formatstring ... direkt editieren wieder abwählt, gehen alle Änderungen verloren (weil der Formatstring wieder durch den Zustand zahlreicher Knöpfe und Zahlen-Eingabefenster bestimmt wird).

Beispiel: Geben Sie eine Ganzzahl wie 123 in das Textfenster Wert ein, wählen Sie den Umwandlungsbuchstaben d, eine Mindestbreite von -1 und eine Genauigkeit ebenfalls von -1. Wählen Sie dann Formatstring ... direkt editieren und editieren Sie den Formatstring im printf-Befehl wie folgt:

printf("%d %<x %<o", dora);

Die Zahl 123 sollte dann dreimal nacheinander ausgegeben werden, erst im 10-er-System (dezimal), dann im 16-er-System (hexadezimal) und dann im 8-er-System (oktal), etwa so:

123 7b 173

Inhaltsverzeichnis


7. Struktur eines Formatstrings

Beim Aufrufen einer printf-Methode muss man mindestens einen Parameter vom Typ String angeben, einen sogenannten Formatstring. Ein Formatstring besteht aus beliebig vielen (0 oder mehr) Umwandlungsbefehlen. Zwischen den Umwandlungsbefehlen (und vor dem ersten und nach dem letzten Umwandlungsbefehl) dürfen beliebige Textstücke beliebiger Länge (0 oder mehr Zeichen) stehen. Im einfachsten Fall besteht ein Formatstring nur aus einem beliebigen Text (ohne Umwandlungsbefehle darin). Ein Umwandlungsbefehl beginnt immer mit einem Prozentzeichen % und endet mit einem speziellen Umwandlungsbuchstaben (wie z.B. d oder f) oder einem Zusatzbuchstaben (wie z.B. B oder c). Normalerweise wird der n-te Umwandlungsbefehl im Formatstring auf den n-ten zusätzlichen Parameter (hinter dem Formatstring angewendet). In der Ausgabe eines printf-Befehls erscheinen anstelle der Umwandlungsbefehle die entsprechend umgewandelten Parameter.

Beispiel 1: "Endpreis: %d Euro %d Cent" (Textstücke "Endpreis ", " Euro " und " Cent", Umwandlungsbefehle %d und %d)

Beispiel 2: "%5d Euro %2d Cent ist zu viel!" (Textstücke " Euro " und " Cent ist zu viel!", Umwandlungsbefehle %5d und %2d)

Es gibt zwei besondere Textstücke. Das Textstück "%%" bezeichnet eine einzelnes Prozentzeichen (welches nicht als Beginn eines Umwandlungsbefehls interpretiert wird). Das Textstück "%n" bezeichnet eine Zeilenendemarkierung (je nach Plattform ein CR-Zeichen oder ein LF-Zeichen ein CR-Zeichen und ein LF-Zeichen).

Achtung: Das PrintfApplet formatiert immer nur den Wert einer Variablen namens dora. Deshalb darf der Formatstring des printf-Befehls normalerweise nur einen Umwandlungsbefehl enthalten. Im Abschnitt 6. Den Formatstring direkt editieren findet man eine Ausnahme zu dieser Regel.

Inhaltsverzeichnis


8. Struktur eines Umwandlungsbefehls

Der Formatstring eines printf-Befehls darf beliebig viele (0 oder mehr) Umwandlungsbefehle enthalten. Ein Umwandlungsbefehl hat folgende Struktur:

%[Schalter][Mindestbreite][.Genauigkeit]Umwandlungsbuchstabe[Zusatzbuchstabe]

Die in eckige Klammern eingefassten Angaben sind optional. Nur ein Prozentzeichen und einen Umwandlungsbuchstaben muss man in jedem Fall angeben.

Inhaltsverzeichnis


9. Mindestbreite

Die Mindestbreite ist ein optionaler Teil eines Umwandlungsbefehls. Die Mindestbreite ist eine Ganzzahl größer oder gleich 1 (0 ist nicht erlaubt!). Eine Mindestbreite m legt Folgendes fest: Falls das rohe Umwandlungsergebnis aus weniger als m Zeichen besteht, wird es durch Anfügen von Füllzeichen auf die Mindestbreite m verlängert. Falls das rohe Umwandlungsergebnis bereits aus m oder mehr Zeichen besteht, wird es nicht verändert.

Normalerweise wird das Blankzeichen (' ') als Füllzeichen verwendet. Mit dem Schalter 0 kann man die Ziffer 0 als Füllzeichen festlegen.

Normalerweise wird ein zu verlängernder Wert rechtsbündig ausgerichtet (d.h. die Füllzeichen werden links angefügt). Mit dem Schalter Minus ('-') kann man bewirken, dass der Wert linksbündig ausgerichtet wird (d.h. dass die Füllzeichen rechts angefügt werden).

Inhaltsverzeichnis


10. Genauigkeit

Die Genauigkeit ist ein optionaler Teil eines Umwandlungsbefehls. Die Genauigkeit besteht aus einem Punkt ('.'), gefolgt von einer Ganzzahl größer oder gleich 0.

Bei Bruchzahlen legt eine Genauigkeit g fest, fass die Zahl mit g Nachpunktstellen formatiert (und voher auf g Nachpunktstellen gerundet) werden soll. Wenn man Ganzzahlen mit den Umwandlungsbuchstaben d, o, x oder X formatiert, darf man keine Genauigkeit angeben (Ganzzahlen haben keine Nachpunktstellen).

Im Zusammenhang mit den Umwandlungsbuchstaben s und S (wie String) legt eine Genauigkeit g fest, dass höchstens die ersten g Zeichen des rohen Ergebnisses verwendet (und die übrigen Zeichen weggeworfen) werden sollen. Falls das rohe Ergebnis nur aus g oder weniger Zeichen besteht, werden alle Zeichen verwendet.

Beispiel 1: Wenn man die Ganzzahl 12345 mit dem Formatstring "%.3s" formatiert, ist das Ergebnis gleich 123.

Beispiel 2: Wenn man die Bruchzahl 23456.78 mit dem Formatstring "%.3s" formatiert, ist das Ergebnis gleich 234.

Beispiel 3: Wenn man den String "abcde" mit dem Formatstring "%.3" ausgibt, ist das Ergebnis gleich abc.

Wenn man den Umwandlungsbuchstaben s oder S mit einer Mindestbreite m und einer Genauigkeit g kombiniert, wird zuerst die Genauigkeit und dann die Mindestbreite angewendet, d. h. vom rohen Umwandlungsergebnis werden höchstens die ersten g Zeichen genommen und durch Anfügen von Füllzeichen auf die Mindestbreite m verlängert.

Beispiel 4: Wenn man die Bruchzahl 23456.78 mit dem Formatstring "%9.3s" formatiert, ist das Ergebnis gleich 234...... .

Beispiel 5: Wenn man die Bruchzahl 23456.78 mit dem Formatstring "%9.3f" formatiert, ist das Ergebnis gleich 23456.780.

Inhaltsverzeichnis


11. Ganzzahlen

Als Ganzzahlen gelten Werte der Typen byte, Byte, short, Short, int, Integer, long, Long und BigInteger. Werte der Typen char und Character gelten nicht als Ganzzahlen (sondern als Zeichen). Ganzzahlen kann man mit den Umwandlungsbuchstaben d, o, x und X (und mit den universellen Umwandlungsbuchstaben b, B, h, H, s und S) formatieren.

Inhaltsverzeichnis


12. Bruchzahlen

Als Bruchzahlen gelten Werte der Typen float, Float, double, Double und BigDecimal. Bruchzahlen kann man mit den Umwandlungsbuchstaben a, A, e, E, f, g und G (und mit den universellen Umwandlungsbuchstaben b, B, h, H, s und S) formatieren. Einen Umwandlungsbuchstaben F gibt es nicht!

Inhaltsverzeichnis


13. Zeichen

Als Zeichen gelten Werte der Typen char und Character. Werte der Typen String und StringBuilder gelten nicht als Zeichen. Zeichen kann man mit den Umwandlungsbuchstaben c und C (und mit den universellen Umwandlungsbuchstaben b, B, h, H, s und S) formatieren.

Inhaltsverzeichnis


14. Zeitwerte

Als Zeitwerte gelten die Werte der Typen Calendar, long und Long. Zeitwerte kann man mit den Umwandlungsbuchstaben t und T formatieren. Jeder Zeitwert beschreibt ein Datum und einen Zeitpunkt (Jahr, Monat, Tag, Stunde, Minute, Sekunde, Millisekunde). Wenn man Werte der Typen long oder Long als Zeitwerte (d.h. mit t oder T) formatiert, werden sie als die Anzahl der Millisekunden interpretiert, die seit dem 1. Januar 1970 vergangen sind. Dieses Datum gilt als der Beginn unserer Epoche. Zeitpunkte vor unserer Epoche werden durch negative, Zeitpunkte innerhalb unserer Epoche durch positive long-Werte beschrieben.

Nach dem Umwandlungsbuchstaben t bzw. T muss man immer einen Zusatzbuchstaben angeben.

Inhaltsverzeichnis


15. Umwandlungsbuchstabe

Jeder Umwandlungsbefehl im Formatstring eines printf-Befehls beginnt mit einem Prozentzeichen % und endet mit einem Umwandlungsbuchstaben wie S, d oder f etc. Die folgenden Beispiel-Formatstrings enthalten je einen Umwandlungsbefehl: "%S", "%12S", "%d", "%+-12d", "%f", "%+-12.3f".

Es gibt 12 kleine Umwandlungsbuchstaben (b, h, s, c, d, o, x, a, e, f, g und t) und zu fast jedem kleinen auch einen entsprechenden großen Umwandlungsbuchstaben. Von dieser Regel gibt es drei Ausnahmen: Zu d, o und f gibt es keinen entsprechenden großen Umwandlungsbuchstaben.

Ein großer Umwandlungsbuchstabe hat immer eine ganz ähnliche Wirkung wie der entsprechende kleine Umwandlungsbuchstabe, nur dass im Ergebnis alle kleinen Buchstaben durch große ersetzt sind. Es gibt keinen großen Umwandlungsbuchstaben ohne entsprechenden kleinen Umwandlungsbuchstaben.

Beispiel 1: Wenn man String-Wert "abcABC123" mit dem Formatstring "%s" bzw. "%S" formatiert, ist das Ergebnis gleich abcABC123 bzw. ABCABC123.

Beispiel 2: Wenn man den float-Wert 1.5 mit dem Formatstring "%e" bzw. "%E" formatiert, ist das Ergebnis gleich 1.50e+00 bzw. 1.50E+00.

Beispiel 3: Wenn man den long-Wert 0 als Datums-und-Zeitangabe mit dem Formatstring "%tB" bzw. "%TB" formatiert, ist das Ergebnis gleich Januar bzw. JANUAR.

Inhaltsverzeichnis


16. Zusatzbuchstabe

Wenn man einen Zeitwert mit dem Umwandlungsbuchstaben t oder T formatiert, muss man nach dem Umwandlungsbuchstaben immer einen Zusatzbuchstaben angeben. Jeder Zeitwert enthält eine vollständige Datums-und-Zeitangabe. Der Zusatzbuchstabe legt fest, welche Teile dieser Datums-und-Zeitangabe ausgegeben werden sollen, z.B. M (nur die Minute 00 bis 59), Y (nur das Jahr, mindestens 4-stellig), c (eine vollständige Datums- und Zeitangabe wie z.B. So.Okt.10.12:13:43.GMT+01:00.2004)

Beispiel 1: Wenn man in der Zeitzone GMT+01 (eine Stunde später als Greenwich Mean Time) den long-Wert 0 mit dem Formatstring "%tc" formatiert, ist das Ergebnis gleich Do.Jan.01.01:00:00.GMT+01:00.1970 (Donnerstag, 1. Januar, 01 Uhr und 00 Minuten und 00 Sekunden).

Beispiel 2: Wenn man in der Zeitzone GMT+01 den long-Wert -3600000 (d.h. 3600000 Millisekunden gleich eine Stunde vor unserer Epoche) mit dem Formatstring "%tc" formatiert, ist das Ergebnis gleich Do.Jan.01.00:00:00.GMT+01:00.1970.

Beispiel 3: Wenn man in der Zeitzone GMT+01 den long-Wert -3600001 (d.h. 3600001 Millisekunden gleich eine Stunde-und-und-eine-Millisekunde vor unserer Epoche) mit dem Formatstring "%tc" formatiert, ist das Ergebnis gleich Mi.Dez.31.23:59:59.GMT+01:00.1969 (Mittwoch, 31. Dezember, 23 Uhr und 59 Minuten und 59 Sekunden).

Inhaltsverzeichnis


17. Über das PrintfApplet

Autor: Ulrich Grude

Netzseite: www.tfh-berlin.de/~grude

e-mail: grude@tfh-berlin.de

Verbesserungsvorschläge, Hinweise auf Fehler und (positive und negative) Kritik sind jederzeit willkommen, am liebsten per e-mail. Viel Spaß und Erfolg mit dem PrintfApplet.