From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/html/k100076.html | 392 +++++++++++++++++++++ 1 file changed, 392 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100076.html (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100076.html') diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100076.html b/Master/Reference Architectures and Patterns/hjp5/html/k100076.html new file mode 100644 index 0000000..0225b7f --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100076.html @@ -0,0 +1,392 @@ + + + +Handbuch der Java-Programmierung, 5. Auflage + + + + + + + + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage +
 <<  +  <   +  >   + >>  + API  +Kapitel 11 - Strings +
+
+ + + + +

11.6 Ausgabeformatierung

+
+ +
+ + + + +

11.6.1 Grundlagen

+ +

+C-Programmierer vermissen in Java schon länger eine bequeme und +flexible Möglichkeit, elementare Datentypen formatiert auszugeben. +Während Methoden wie toString +oder println +zwar bequem in der Anwendung sind, bieten sie kaum Möglichkeiten, +die Formatierung der Ausgabe gezielt zu beeinflussen. Und die seit +dem JDK 1.2 vorhandenen Klassen im Paket java.text +sind zwar flexibel und mächtig, aber oft umständlich in +der Anwendung und nicht ganz einfach zu verstehen. +

+ + + + + + + + + + + +
+ +

+Seit der J2SE 5.0 gibt es die Klasse java.util.Formatter, +deren Möglichkeiten der printf-Funktion +in C und C++ ebenbürtig sind. Sie bietet die Möglichkeit, +alle primitiven Datentypen und ihre Wrapper, sowie Datums-/Zeitwerte +der Klassen Calendar +und Date +in vielfältiger Weise (auch länderspezifisch) formatiert +auszugeben. Prinzipiell muss dazu ein Formatter-Objekt +instanziert und dessen Ausgabemethode format +aufgerufen werden. Einfacher wird es dadurch, dass format +mit all seinen Möglichkeiten auch in den Klassen String +und PrintStream +zur Verfügung steht. Letztere besitzt als Remineszenz an C/C++ +sogar eine Methode printf +mit gleicher Funktionalität. Wir wollen uns auf die Klassen String +und das Objekt System.out +konzentrieren, die übrigen Stellen funktionieren in der gleichen +Weise.

+ + + + +
 JDK1.1-6.0 
+
+ +

+Die Methode format gibt es in +zwei Varianten: +

+ + + + + +
+ +
+static String format(Locale l, String format, Object... args)
+
+static String format(String format, Object... args)
+
+
+
+java.util.Formatter
+ +

+Bei der ersten Form kann explizit angegeben werden, welche Sprach- +bzw. Ländereinstellung verwendet werden soll, bei der zweiten +wird die Default-Locale +verwendet. Der Parameter format +dient zur Übergabe eines Formatstrings, die übrigen Parameter +sind dessen Argumente. Der Formatstring besteht aus Formatangaben +und festem Text. Die Formatangaben beginnen mit einem Prozentzeichen +und enden mit einem Konvertierungszeichen. Dazwischen können +weitere Optionen enthalten sein. Insgesamt sieht die Syntax so aus: +

+ + + + +
+ +
+  % [Argument-Index$][Flags][Width][.Precision]Conversion
+
+
+
+ +

+Der Formatstring wird von links nach rechts ausgegeben. Zu jeder Formatangabe +muss es einen Parameter geben, dessen Wert entsprechend formatiert +ausgegeben wird. Alle übrigen Teile des Formatstrings werden +als fester Text angesehen und unverändert ausgegeben. Das folgende +Listing zeigt ein einfaches Beispiel: + + +

+ + + + + +
+ +
+001 /* Listing1106.java */
+002 
+003 public class Listing1106
+004 {
+005   public static void main(String[] args)
+006   {
+007     for (int i = 5; i < 199; i += 37) {
+008       System.out.format("Aktueller Wert: %3d%n", i);
+009     }
+010   }
+011 }
+
+
+Listing1106.java
+ +Listing 11.6: Formatierte Zahlenausgabe

+ +

+Die Ausgabe der Methode ist: + +

+Aktueller Wert:   5
+Aktueller Wert:  42
+Aktueller Wert:  79
+Aktueller Wert: 116
+Aktueller Wert: 153
+Aktueller Wert: 190
+
+ + +

+An format werden zwei Parameter +übergeben: der Formatstring »Aktueller Wert: %3d%n« +und die Schleifenvariable i. +Der Formatstring enthält den konstanten Text »Aktueller +Wert: «, der unverändert ausgegeben wird, sowie die beiden +Formatangaben »%3d« und »%n«. Die erste gibt an, +dass das nächste Argument als Ganzzahl mit einer Feldbreite von +drei Stellen ausgegeben werden soll. Die zweite steht als Platzhalter +für eine Zeilenschaltung. + + + + +

11.6.2 Die Formatangaben

+ +

+Auf diese Weise können auch sehr komplexe Ausgabeformatierungen +erzeugt werden. Dazu wollen wir uns die Bestandteile einer Formatangabe +etwas genauer ansehen. +

+ +

+Weitere Details, Möglichkeiten und Einschränkungen werden +in der sehr ausführlichen API-Dokumentation der Klasse java.util.Formatter +beschrieben. Das folgende Listing zeigt noch einmal alle besprochenen +Möglichkeiten im Überblick: + + +

+ + + + + +
+ +
+001 /* Listing1107.java */
+002 
+003 import java.util.*;
+004 
+005 public class Listing1107
+006 {
+007   public static void main(String[] args)
+008   {
+009     //Boolesche Werte
+010     System.out.format("%b %b %2$b %1$b%n", true, false);
+011     //Ganzzahlen
+012     System.out.format("[%d]%n", -2517);
+013     System.out.format("[%7d]%n", -2517);
+014     System.out.format("[%-7d]%n", -2517);
+015     System.out.format("[%(7d]%n", -2517);
+016     System.out.format("[%07d]%n", -2517);
+017     System.out.format("[%,7d]%n", -2517);
+018     System.out.format("%1$d %<o %<x %<X%n", 127);
+019     //Fließkommazahlen
+020     System.out.format("%f%n", 0.000314);
+021     System.out.format("%1$6.2f %1$6.2e %1$6.2E %1$6.2G%n", 3.141592);
+022     System.out.format("%,8.2f%n", 31415.92);
+023     System.out.format(Locale.ENGLISH, "%,8.2f%n", 31415.92);
+024     //Zeichen und Strings
+025     System.out.format("%c%c%c\n", 97, 64, 98);
+026     System.out.format("%s nein\n", "ja");
+027     //Datum/Uhrzeit
+028     Calendar now = Calendar.getInstance();
+029     System.out.format(
+030       "%1$td.%1$tm.%1$tY %1$tH:%1$tM:%1$tS%n",
+031       now
+032     );
+033     System.out.format("%tF%n", now);
+034     System.out.format("%tc%n", now);
+035   }
+036 }
+
+
+Listing1107.java
+ +Listing 11.7: Formatierte Ausgabe

+ +

+Seine Ausgabe ist: + +

+true false false true
+[-2517]
+[  -2517]
+[-2517  ]
+[ (2517)]
+[-002517]
+[ -2.517]
+127 177 7f 7F
+0,000314
+  3,14 3.14e+00 3.14E+00    3.1
+31.415,92
+31,415.92
+a@b
+ja nein
+02.10.2004 21:38:24
+2004-10-02
+Sa Okt 02 21:38:24 CEST 2004
+
+ +
+ + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 +
 <<  +  <   +  >   + >>  + API  +© 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de +
+ + + -- cgit v1.2.3