Lerne Coding
Strings richtig Formatieren und Ausgeben in Java
09.09.2022

Die richtige Formatierung von Strings in Java!

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGesch├Ątzte Lesezeit ca. Minuten

Strings zu formatieren, kann mühselig sein. Leicht schleichen sich dabei kleine Fehler ein. Mal wurde da ein Leerzeichen vergessen, hier der String nicht richtig geschlossen und bei den ganzen +-Symbolen kann schnell die Übersicht verloren gehen. In diesem Artikel möchte ich dir zeigen, wie du in Java Strings deutlich einfacher formatieren kannst.

Mit den Themen, die du in diesem Artikel lernst, kannst du zum Beispiel:

  • die Anzahl der Nachkommastellen eines Doubles definieren
  • Platzhalter für ein String definieren und ersetzen
  • ein Datum nach deinem Belieben formatieren

Die Formatangaben, die wir in diesem Artikel besprechen, können wir unter anderem mit System.out.printf() und mit String.format() einsetzen. Hinter diesen beiden Methoden steht die Formatter-Klasse desjava.util Pakets. Genauer genommen steht hinter beiden die format() Methode von der Formatter-Klasse.

Von Konkatenation zum String Format

Folgendes Beispiel zeigt dir die Schönheit der Formatierung von Strings. Es gibt einige Vorteile in der Verwendung: Im Vergleich zu der Konkatenation von Strings auf der einen Seite, ist es einfacher zu schreiben, als immer wieder eine String zu beenden, die Variable dazwischen zu schreiben und immer so weiter. Bei vielen Variablen ist das ziemlich nervig. Hinzukommt, dass direkt bestimmte Formate verwendet werden können, ohne diese vorher vorbereiten zu müssen. In dem Beispiel gibt es 3 verschiedene Typen: Datum, Float und String. Diese können wir auf unterschiedlichste Weisen formatieren.

Wir können unter anderem direkt das Datum formatieren, ohne eine zusätzliche Klasse abzurufen. Mit %t lässt sich ein Datums-Wert einleiten. Bei jedem weiteren Feld des Datums fangen wir mit %<t an. Dabei steht die spitze Klammer dafür, dass sich der Wert auf den vorherigen Wert bezieht, sodass wir die Variable today nicht mehrfach der Methode übergeben müssen.

Date today = new Date();
float temperatur = 35.0595f;
String location = "Düsseldorf";

System.out.print("Am " + today + " wird es " + temperatur + " Grad warm in " + location + ". \n");
// Ergebnis: Am Sun Aug 07 01:19:00 CEST 2022 wird es 35.0595 Grad warm in Düsseldorf.

System.out.printf("Am %td.%<tm.%<ty wird es %.2f Grad warm in %s. %n", today, temperatur, location);
// Ergebnis: Am 07.08.22 wird es 35,06 Grad warm in Düsseldorf.

Der Temperaturwert ist in unserem Beispiel 4-stellig. Für eine:n Wissenschaftler:in sind die Details bestimmt interessant, wenn ich aber die Temperatur wissen will, reichen mir auch 2 Stellen hinter dem Komma. Das definieren wir über eine Zahl vor dem f. Wichtig ist, dass vor der Zahl ein Punkt steht. Die Location ist ein einfacher String, der keine besondere Formatierung bekommen soll.

Verwendung von String.format

Der Einfachheit halber verwende ich in den nachfolgenden Beispielen immer printf . Du kannst die Strings aber auch mit String.format() erstellen, falls du diese in eine Variable speichern möchtest. Das folgende Beispiel zeigt dir den String aus dem oben Beispiel noch einmal mit der Verwendung von String.format(). Du wirst erkennen, dass sich bis auf die Zuweisung in eine Variable text nichts verändert hat. Der Output wird den identischen Inhalt haben.

String text = String.format("Am %td.%<tm.%<ty wird es %.2f Grad warm in %s. %n", today, temperatur, location);

System.out.println(text); // Am 07.08.22 wird es 35,06 Grad warm in Düsseldorf.

Übersicht von wichtigen Formatspezifizierer

Nachdem wir das erste Beispiel betrachtet haben, ist dir vielleicht aufgefallen, dass wir je nach Typ einen anderen Buchstaben zur Definition benötigen. In der Tabelle findest du eine Übersicht aller Möglichkeiten, die du häufiger benötigen wirst.

Das Formatieren einzelner Typen im Detail

Eine grobe Übersicht hast du nun erhalten, was alles möglich ist. Im Folgenden schauen wir uns konkrete Beispiele für die verschiedenen Typen an.

Möglichkeiten Strings zu formatieren

Um Strings zu formatieren, stehen viele verschiedene Möglichkeiten bereit. Mittels %.Ns wobei N für eine Zahl steht, kannst du angeben, wie lang der String sein soll. So können wir zum Beispiel nur das Hello von "HelloCoding" ausgeben lassen, wenn nur die ersten 5 Zeichen ausgegeben werden sollen. Zusätzlich gibt es die Option, am Ende oder am Anfang des Strings Leerzeichen hinzuzufügen.

var output = System.out;

String data = "HelloCoding";

output.printf("Ausgabe: %s %n", data);       // Ausgabe: HelloCoding
output.printf("Ausgabe: %S %n", data);       // Ausgabe: HELLOCODING
output.printf("Ausgabe: %.5s %n", data);     // Ausgabe: Hello
output.printf("Ausgabe: %15s %n", data);     // Ausgabe:     HelloCoding
output.printf("Ausgabe: %-15s| %n", data);   // Ausgabe: HelloCoding    |

Formatierung von Daten & Zeiten

Jetzt betrachten wir, wie Zeitangaben und Datumsangaben formatiert werden können. Dafür habe ich einmal fünf Beispiele herausgesucht, die dargestellt werden sollen. Um ein Datum zu formatieren, wird immer der Spezifizierer %t genutzt, wobei dieser immer zusätzlich Buchstaben erwartet, dazu unten noch eine detailliertere Auflistung.

So kann %tT verwendet werden für die Ausgabe der Uhrzeit als HH:MM:SS, oder alternative %tR für die Ausgabe von HH:MM.

Date current = new Date();

op.printf("Ausgabe: %tT %n", current);              // Ausgabe: 14:18:08 
op.printf("Ausgabe: %tR %n", current);              // Ausgabe: 14:18 
op.printf("Ausgabe: %td.%<tm.%<ty %n", current);    // Ausgabe: 07.08.22 
op.printf("Ausgabe: %td. %<tb %n", current);        // Ausgabe: 07. Aug. 
op.printf("Ausgabe: %tc %n", current);              // Ausgabe: So. Aug. 07 14:18:08 MESZ 2022

Spezifizierer für die Formatierung von Zeiten

In der folgenden Tabelle findest du alle Spezifizierer für Zeiten.

Thema der Tabelle "Formatierung von Zeiten"
Spezifizierer Beschreibung Ausgabe Beispiel
%tH Aktuelle Stunde des Tages im 24 Stunden Format, mit f├╝hrender 0 falls notwendig. 14
%tM Aktuelle Minuten bestehenden aus zwei Ziffern, mit f├╝hrender 0 falls notwendig. 41
%tS Aktuelle Sekunden bestehenden aus zwei Ziffern, mit f├╝hrender 0 falls notwendig. 36
%tI Aktuelle Stunde des Tages im 12 Stunden Format bestehende aus zwei Ziffern, mit f├╝hrender 0 falls notwendig. 02
%tk Aktuelle Stunde des Tages im 24 Stunden Format. 14
%tl Aktuelle Stunde des Tages im 12 Stunden Format. 2
%tL Millisekunden innerhalb der Sekunde bestehende aus drei Ziffern, mit f├╝hrender 0 falls notwendig. 819
%tN Nanosekunden innerhalb der Sekunde bestehende aus neun Ziffern, mit f├╝hrender 0 falls notwendig. 819000000
%tp Ausgabe von am oder pm, wenn das T gro├čgeschrieben wird, erh├Ąltst du entsprechende eine gro├čgeschriebene Ausgabe. pm
%tz Nummerische Angabe der Zeitzone nach RFC 822 basierend auf GMT. Basiert auf der Standard-Zeitzone der JVM. +0200
%tZ Ausgabe der Zeitzone basierend auf der lokalen String Repr├Ąsentation. MESZ
%ts Sekunden seit dem 1. Januar 1970, Beginn der Zeitrechnung bei Computern. 1659876096
%tQ Millisekunden seit dem 1. Januar 1970, Beginn der Zeitrechnung bei Computern. 1659876096819

Spezifizierer für die Formatierung von Daten

In der folgenden Tabelle findest du alle Spezifizierer für Daten.

Thema der Tabelle "Formatierung von Daten"
Spezifizierer Beschreibung Ausgabe Beispiel
%tB Monatsnamen in der lokalen Variante. August
%tb %th Monatsnamen in der lokalen Abk├╝rzungsvariante auf. Aug.
%tA Wochentag in der Lokalen Variante. Sonntag
%ta Wochentags Abk├╝rzung in der Lokalen Variante. So.
%tC Die Jahreszahl geteilt durch 100, dargestellt als zwei Ziffern, mit f├╝hrender 0 falls notwendig. 20
%tY Das aktuelle Jahr bestehende aus vier Ziffern, mit f├╝hrender 0 falls notwendig. 2022
%ty Das aktuelle Jahr bestehende aus zwei Ziffern, mit f├╝hrender 0 falls notwendig. 22
%tj Tag des Jahres im Gregorianischen Kalender 219
%tm Aktueller Monat bestehenden aus zwei Ziffern, mit f├╝hrender 0 falls notwendig. 08
%td Aktueller Tag des Monats bestehenden aus zwei Ziffern, mit f├╝hrender 0 falls notwendig. 07
%te Aktueller Tag des Monats bestehenden aus zwei Ziffern. 7

Spezifizierer für Standard Formatierungen

Neben den oben gezeigten Spezifizierer, um spezifische Daten zu erhalten, stellt Java noch Standards bereit für typische Fälle, die häufiger benötigt werden.

Thema der Tabelle "Standard Formate f├╝r Daten & Zeiten"
Spezifizierer Beschreibung Ausgabe Beispiel
%tR Zeit formatiert in der Ausgabe als ÔÇ×%tH:%tMÔÇť. 14:48
%tT Zeit formatiert in der Ausgabe als ÔÇ×%tH:%tM:%tSÔÇť 14:48:42
%tr Zeit formatiert in der Ausgabe als ÔÇ×%tI:%tM:%tS %TpÔÇť 02:48:42 PM
%tD Datum formatiert als ÔÇ×%tm/%td/%tyÔÇť. 08/07/22
%tF Datum formatiert als ÔÇ×%tY-%tm-%tdÔÇť. (ISO 8601) 2022-08-07
%tc Datum formatiert als ÔÇ×%ta %tb %td %tT %tZ %tYÔÇť. So. Aug. 07 14:48:42 MESZ 2022

Zahlen Formatieren

Nachdem wir nun Datum, Zeit und Strings fertig formatiert haben, wollen wir uns noch Möglichkeiten für die Zahlen anschauen.

Eine Ganzzahl formatieren in Java

Bei Ganzzahlen haben wir verschiedene Optionen zur Formatierung. Wir können eine führende 0 definieren, wie wir es in dem Beispiel bei der 3. Variante machen. Wir können Leerzeichen definieren, die ausgegeben werden sollen. Die letzten beiden Beispiele zeigen die Verwendung von einem Tausender Separator, wobei die unter Variante die US-amerikanische Variante verwendet.

int value = 7500;

op.printf("Ausgabe: %d %n",value);                          // Ausgabe: 7500
op.printf("Ausgabe: %d %n",- value);                        // Ausgabe: -7500
op.printf("Ausgabe: %06d %n",value);                        // Ausgabe: 007500
op.printf("Ausgabe: %6d %n",value);                         // Ausgabe:   7500
op.printf("Ausgabe: %,d %n", value);                        // Ausgabe: 7.500
op.printf(Locale.US,"Ausgabe: %,d %n", value);              // Ausgabe: 7,500

Doubles & Floats richtig Formatieren

Bei Floats und Doubles ist sicherlich eine der interessantesten Möglichkeiten, die Anzahl der Nachkommastellen zu definieren. Das geschieht durch einen Punkt, gefolgt von der Längenangabe. Um die Tausenderstellen zu definieren, kannst du hier ebenfalls den Punkt verwenden, wie es im zweiten Beispiel zu sehen ist. Das 3. Beispiel zeigt dir noch mal die Möglichkeit die Länge zu definieren und ggf. führende Nullen zu ergänzen. Natürlich kannst du hier auch wieder mit verschiedenen Varianten arbeiten, wie zum Beispiel die US-amerikanische Variante.

double value_double = 7500.56789123456;

op.printf("Ausgabe: %.2f %n",value_double);                 // Ausgabe: 7500,57 
op.printf("Ausgabe: %,.2f %n",value_double);                // Ausgabe: 7.500,57 
op.printf("Ausgabe: %014f %n",value_double);                // Ausgabe: 0007500,567891 
op.printf(Locale.US,"Ausgabe: %,f %n", value_double);       // Ausgabe: 7,500.567891

Werte durch Positionsangaben im Ausgabestring verschieben

Nachdem wir die Verwendung der Formatierung kennengelernt haben, möchte ich dir als Letztes noch zeigen, wie du Argumente in einer anderen Reihenfolge verwenden kannst, als du sie an die Methode übergeben hast. Dafür haben wir den Satz aus dem ersten Beispiel vom Anfang noch einmal umgestellt, aber die Argumente in der alten Reihenfolge belassen. Durch eine Zahl gefolgt von einem Dollar wird auf das entsprechende Argument zugegriffen. Die Besonderheit hier ist, dass nicht, wie in Programmiersprachen üblich, von 0 an gezählt wird, sondern von 1. Das kann sehr irritierend sein, wenn man das nicht weiß!

System.out.printf("Ausgabe: Es wird %2$.2f Grad warm in %3$s am %1$td.%<tm.%<ty.", today, temperatur, location);
// Ausgabe: Es wird 35,06 Grad warm in Düsseldorf am 07.08.22.

Zusammenfassung, was du gelernt hast!

In diesem Artikel hast du gelernt, wie du Zahlen, Strings und Zeiten mit einfachen Formatierungen präsentieren kannst. Wie du siehst, kannst du die optische Darstellung auf Code-Ebene durch format und printf verbessern. Wenn du das ganze ohne die Formatierungsoptionen machen würdest, wäre der gesamte Code deutlich länger. Zeig uns gerne ein Beispiel, wie du die String-Formatierung nun verwendest.

Bildquelle - Vielen Dank an die Ersteller:innen f├╝r dieses Bild
Kommentare zum Artikel

Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Strings richtig Formatieren und Ausgeben in Java"!

Kommentar schreiben

Vom Autor Empfohlen
close