~Java4Beginners~
~Java4Beginners~

System.out.print

Grundsätzlich sprechen wir bei Ein- und Ausgaben davon, Datenströme umzuleiten. In diesem Kapitel wird ein Datenstrom vom Programm aus auf die Konsole umgeleitet. Es gibt eine Vielzahl unterschiedlicher Möglichkeiten diese Input- und Output-Streams zu realiserien. Hier werden wir die momentan einfachste Konsolenausgabe betrachten, nämlich System.out. Die Klasse System.out stellt für uns 3 relevante Methoden zur Konsolenausgabe zur Verfügung.
Methode Beschreibung Beispiel
print() Gibt die in der Klammer hinterlegte Zeichenkette auf der Konsole aus. System.out.print("Das ist eine print-Anweisung");
println() Gibt die in der Klammer hinterlegt Zeichenkette auf der Konsole aus und fügt am Ende der Zeichenkette einen Zeilenumbruch durch. System.out.println("Das ist eine println-Anweisung");
printf() Gibt den in der Klammer hinterlegten Formatierungsstring auf der Konsole aus. System.out.printf("%d\n", 12);
Die Methoden print() und println() sind relativ einfach zu verstehen und umzusetzen, während bei der Methode printf() schon mehr beachtet werden muss. Bei print() und println() werden die Zeichenketten als eine Anreihung von Literalen und Variablen gebildet.
Bei der Methode printf() existieren im Formatstring nur Literale, Escape-Frequenzen und Format-Spezifizierer. Variablen befinden sich ausserhalb des Formatstrings. Die Position einer Variable wird im Formatstring angegeben. Bei der Ausgabe erkennt die Laufzeitumgebung, dass das erste %s als Platzhalter für einen String steht, dessen Wert aus der Variablen entnommen wird, die als erstes nach dem Formatstring kommt. Sollte es sich bei der Varibalen nicht um einen String-Wert handeln, so wird dies zu einem Fehler führen.

Escape-Frequenzen

Escape-Freqenzen sind Zeichenpaare, die innerhalb eines Strings verwendet werden können, um ein spezielles Verhalten zu erzwingen.
Escape-Freuqenz Beschreibung Beispiel Ausgabe
\b Löscht das Zeichen links von der Escape-Frequenz und führt die Zeichenkette dort fort System.out.println("ac\bbc"); abc
\n Erzeugt einen Zeilenumbruch System.out.println("Karl\nHeinz"); Karl
Heinz
\r löscht die Zeile und führt die restliche Zeichenkette vom Zeilenbeginn fort. System.out.println("Karlchen\rHeinz"); Heinz
\t Erzeugt einen Tabulatorensprung System.out.println("Karl\tHeinz"); Karl    Heinz
\" Gibt doppeltes Anführungszeichen aus. System.out.println("Karl\"Heinz"); Karl"Heinz
\' Gibt ein einfaches Anführungszeichen aus. System.out.println("Karl\'Heinz"); Karl"Heinz
\\ Gibt einen Backslash aus. System.out.println("Karl\\Heinz"); Karl\Heinz
Die Escapefrequenzen können unabhängig von der aufgerufenen System.out - Methode in Zeichenketten verwendet werden.

/**
 * Beispiele der Escape-Frequenzen
 * @author Markus Badzura
 */
public class EscapeFrequenzen 
{
    public static void main (String[] args)
    {
        System.out.println("ac\bbc");
        System.out.println("Karl\nHeinz");
        System.out.println("Karlchen\rHeinz");
        System.out.println("Karl\tHeinz");
        System.out.println("Karl\"Heinz");
        System.out.println("Karl\'Heinz");
        System.out.println("Karl\\Heinz");
    }
}

Farbige Konsolenausgabe mit ANSI-Escape-Frequenz

Als Überbleibsel aus DOS-Zeiten haben wir mit Java 8 die Möglichkeit, noch einige ANSI-Escape-Frequenzen zu nutzen, die für ein wenig Farbe auf der Konsole sorgen. Hierbei können wir die Schriftfarbe und/oder Hintergrundfarbe verändern.

Die Syntax für die Ausgabe lautet hierbei:

System.out.println("\33[xxmAusgabetext");
Für das xx können wir für die Schriftfarbe einen Wert zwischen 31 und 38 verwenden, für die Hintergrundfarbe einen Wert zwischen 41 und 48. Wenn wir Schriftfarbe und Hintergrundfarbe definieren wollen, verwenden wir folgende Syntax.

System.out.println("\33[xx;yymAusgabetext");
Hierbei steht das xx für die Schriftfarbe und das yy für die Hintergrundfarbe. Im folgenden Beispielprogramm sehen Sie alle möglichen Eizelkombinationen und anschließend einen Screenshot der Ausgabe.

package ErsteSchritte;

/**
 * Beispiel für farbige Konsolenausgabe
 * @author Markus Badzura
 */
public class Konsole_farbig 
{
  public static void main(String[] args) 
  {
    // Schriftfarbe
    for (int i = 31; i <39; i++)
    {
      System.out.println("\33["+String.valueOf(i)+"mSchriftfarbe");
    }
    System.out.println("\33[0mSchriftfarbe wieder schwarz");
    // Hintergrundfarbe
    for (int i = 41; i <49; i++)
    {
      System.out.println("\33["+String.valueOf(i)+"mHintergrundfarbe");
    }
    // gemischt
    System.out.println("\33[31;46mgemischt");    
  }
}


System.out.printf()

Wie oben bereits geschrieben, haben wir bei dieser Methode die Möglichkeit, über den sogenannten Formatstring, eine formatierte Konsolenausgabe zu erreichen. Die Format-Spezifizierer, die sogenannten Formatter, sind in der Klasse Formatter zur Verfügung gestellt. Da es sich hierbei um eine relativ umfangreiche Ansammlung handelt, werde ich hier nur die gängisten für unseren derzeitigen Bereich nennen. Gerne kann sich jeder über den Inhalt der Klasse über die api-Informationen von Oracle informieren. Um Ihnen die Suche danach zu vereinfachen, folgen Sie einfach folgenden Link: API-Dokumentation Formatter
In folglendem Quelltextauszug werden die einfachen Möglichkeiten der Format-Spezifizierer gezeigt.

/**
 * Arbeiten mit Format-Spezifizieren
 * @author Markus Badzura
 */
public class FormatSpezifizierer 
{
    public static void main(String[] args)
    {
        int i = 1354;
        double d = 1523.2345;
        String s = "Formatierung";
        System.out.println("Beispiel 1");
        System.out.printf("!%d!%d!%n" ,i, -i );
        System.out.println("Beispiel 2");
        System.out.printf("!%5d!%5d!%n" ,i, -i );
        System.out.println("Beispiel 3");
        System.out.printf("!%-5d!%-5d!%n" ,i, -i );
        System.out.println("Beispiel 4");
        System.out.printf("!%+-5d!%+-5d!%n" , i, -i );
        System.out.println("Beispiel 5");
        System.out.printf("!%05d!%05d!%n",  i, -i );
        System.out.println("Beispiel 6");
        System.out.printf("!%f!%f!%n" ,d, -d );
        System.out.println("Beispiel 7");
        System.out.printf("|%.2f|%.2f|%n" ,d, -d );
        System.out.println("Beispiel 8");
        System.out.printf("|%10.2f|%10.2f|%n" , d, -d );
        System.out.println("Beispiel 9");
        System.out.printf("|%010.2f|%010.2f|%n",d, -d);
        System.out.println("Beispiel 10");
        System.out.printf("!%s!%n", s);
        System.out.println("Beispiel 11");
        System.out.printf("!%S!%n", s);
        System.out.println("Beispiel 12");
        System.out.printf("|%20.5s|%n", s);
    }
}
Um die Funktionsweise zu erkennen, werde ich die ersten beiden Beispiele etwas ausführlicher erläutern.

System.out.printf("!%d!%d!%n" ,i, -i );

Anweisungsbestandteil Bedeutung
" Beginn des Formatstrings
! Das Ausrufezeichen ist ein Literal, was als solches auch ausgegeben wird.
%d Platzhalter für eine Variable vom Datentyp int. Da es der erste Platzhalter für eine Variable ist, muss die erste Variable im Anschluss an den Format-String auch eine Variable vom Datentyp int sein.
! Das Ausrufezeichen ist ein Literal, was als solches auch ausgegeben wird.
%d Platzhalter für eine Variable vom Datentyp int. Da es der zweite Platzhalter für eine Variable ist, muss die zweite Variable im Anschluss an den Format-String auch eine Variable vom Datentyp int sein.
! Das Ausrufezeichen ist ein Literal, was als solches auch ausgegeben wird.
%n Dieser Format-Spezifizierer erzeugt einen Zeilenumbruch (Wie die Escape-Frequenz \n)
" Ende des Formatstrings
,i,-1 Nach dem Formatstring kommen die Variablen, jeweils getrennt mit Komma, die formatiert ausgegeben werden sollen.
Die Datentypen der Variablen müssen dem jeweiligen Platzhalter entsprechen.

System.out.printf("!%5d!%5d!%n" ,i, -i );

%5d besagt, dass für die Anzeige des int-Wertes der int-Variablen 5 Zeichenplätze zur Verfügung gestellt werden. Da es sich um einen positiven Wert handelt, wird der Wert rechtsbündig im reservierten Platzbereich ausgerichtet, d. h. sollte der Wert nur 3 Stellen haben, werden am Anfang der Ausgabe zwei Leerstellen eingefügt.
Wert Stelle 1 Stelle 2 Stelle 3 Stelle 4 Stelle 5
136 1 3 6
-462 - 4 6 2
Sollte der Wert mehr Stellen haben, als im Formatstring zur Verfügung gestellt, wird die Längenangabe im Formatstring ingnoriert und der Wert in voller Länge dargestellt.

System.out.printf("!%-5d!%-5d!%n" ,i, -i );

Durch die Angabe eines negativ-Wertes wird im Gegensatz zu Beispiel 2 der Wert linksbündig ausgerichtet.

System.out.printf("!%+-5d!%+-5d!%n" , i, -i );

+- vor der Angabe, der zur Verfügung stehenden Zeichenplätze besagt, dass a) die Ausgabe linksbündig beginnt und b)sämtliche Vorzeichen (Also auch das + bei positiven Werten) angezeigt wird.

System.out.printf("!%05d!%05d!%n", i, -i );

Die 0 vor der Angabe der Zeichenplätze besagt, dass wenn die Anzahl der Stellen kleiner als die Zeichenplätze sind, dann werden diese mit 0 gefüllt.

Abschlussbemerkungen

Um die Sache abzukürzen, sehen Sie sich die jeweilige Ausgabe an. Im Normalfall können Sie die Auswirkung der Format-Spezifizierer in der Ausgabe erkennen. Nochmals gesagt, es handelt sich hier um einen kleinen Ausschnitt von den Möglichkeiten, welche uns die Formatter-Klasse zur Verfügung stellt. Je nach Bedarf wird in weiteren Themen immer mal wieder ein Teil aus dieser Klasse zur Anwendung kommen. Ansonsten ist es beim Erlernen von Java genauso wie bei anderen Sprachen. Einfach ein kleines Programm schreiben und die Auswirkung von verschiedenen Formattern testen. Sie werden schnell feststellen, was sinnvoll und hilfreich ist, und was nicht.
nach oben Java4Beginners -- Seitenversion 1.0 -- Stand: 2017-04-25