Zwei Wege zum Formatieren
Java formatiert Strings aus einer Vorlage, die Format-Spezifizierer (die %-Platzhalter) enthält, plus den einzusetzenden Werten. Es gibt zwei Einstiegspunkte, und sie teilen sich eine identische Syntax:
String.format(template, values...)gibt einen neuenStringzurück.System.out.printf(template, values...)gibt das Ergebnis direkt aus.
Beide erzeugen denselben Text. String.format gibt ihn zurück, damit du ihn speichern kannst; printf schreibt ihn auf die Konsole. Beachte das %n am Ende der printf-Vorlage - das ist der plattformunabhängige Zeilenumbruch (in Formatstrings ihm gegenüber \n der Vorzug zu geben).
Die gängigen Spezifizierer
Jeder Spezifizierer beginnt mit % und endet mit einem Buchstaben, der angibt, welche Art von Wert erwartet wird:
Die drei alltäglichen sind %s (jeder Wert, über sein toString), %d (ganze Zahlen) und %f (Dezimalzahlen). Verwende %%, um ein wörtliches Prozentzeichen auszugeben. Den falschen Typ zu übergeben - etwa einen String an %d - wirft zur Laufzeit eine IllegalFormatConversionException.
Dezimalstellen steuern
%f verwendet standardmäßig sechs Dezimalstellen, was selten das ist, was du willst. Setze .N vor das f, um die Genauigkeit festzulegen (der Wert wird gerundet):
Füge das Komma-Flag für Gruppierungstrennzeichen bei großen Zahlen hinzu:
Breite und Auffüllung
Eine Zahl zwischen dem % und dem Typbuchstaben legt eine Mindestfeldbreite fest und füllt mit Leerzeichen auf, damit sich Spalten ausrichten. Ein führendes - richtet linksbündig aus; eine führende 0 füllt Zahlen mit Nullen auf:
Genau das macht formatierte Tabellen und ausgerichtete Berichte lesbar:
Das %-8s richtet Namen linksbündig in einer 8 Zeichen breiten Spalte aus und %5d richtet die Punktzahlen rechtsbündig in einer 5 Zeichen breiten Spalte aus, sodass die Zahlen unabhängig von der Ziffernanzahl bündig stehen.
Reihenfolge der Argumente
Standardmäßig verbrauchen Spezifizierer die Werte von links nach rechts. Du kannst einen Wert mit N$ (eins-basierter Index) wiederholen oder umordnen - praktisch, wenn derselbe Wert zweimal vorkommt:
%1$s verweist beide Male auf das erste Argument, daher wird echo zweimal ausgegeben.
Die Methode formatted()
Seit Java 15 hat jeder String eine Instanzmethode formatted - dieselbe Engine wie String.format, nur als Methodenaufruf auf der Vorlage geschrieben:
Sie harmoniert besonders gut mit Text Blocks (mehrzeilige Strings in dreifachen Anführungszeichen), wenn du größere formatierte Ausgaben aufbaust.
Wann man String.format nicht verwenden sollte
Für einfache, einmalige Zusammenfügungen ist die schlichte Verkettung mit + klarer und schneller:
String greeting = "Hi, " + name + "!"; // simpler than String.format here
Greife zu String.format / printf, wenn du echte Formatierung brauchst - feste Dezimalstellen, Auffüllung, Ausrichtung, Gruppierung - und nicht nur ein paar Werte aneinanderkleben willst.
Weiter: Operatoren
Formatierung verwandelt Werte in Text. Um diese Werte überhaupt erst zu berechnen, brauchst du Javas Operatoren - arithmetische, vergleichende und logische. Das ist die nächste Seite.
Häufig gestellte Fragen
Wie formatiert man einen String in Java?
Verwende String.format(template, values...), das einen neuen String zurückgibt, in dem jeder Format-Spezifizierer durch einen Wert ersetzt wird: String.format("%s is %d", name, age). Um direkt auszugeben, anstatt einen String aufzubauen, verwende System.out.printf(...) mit derselben Vorlage. Seit Java 15 kannst du auch template.formatted(values...) aufrufen.
Wie formatiert man eine Zahl in Java auf zwei Dezimalstellen?
Verwende den Spezifizierer %.2f: String.format("%.2f", 3.14159) ergibt "3.14". Die Zahl nach dem Punkt gibt an, wie viele Dezimalstellen erhalten bleiben, und der Wert wird gerundet. Für Tausendertrennzeichen füge das Komma-Flag hinzu: %,.2f ergibt "1,234.57".
Was ist der Unterschied zwischen String.format und printf in Java?
Sie verwenden exakt dieselben Format-Spezifizierer. String.format(...) gibt den formatierten Text als neuen String zurück, den du speichern oder weitergeben kannst. System.out.printf(...) schreibt den formatierten Text direkt auf die Standardausgabe und gibt nichts Brauchbares zurück. Verwende String.format, um einen String aufzubauen, und printf, um einen auszugeben.