Menu

Java String-Formatierung: String.format, printf und Format-Spezifizierer

Wie man in Java Strings mit String.format und printf formatiert - die Format-Spezifizierer für Zahlen, Auffüllung und Dezimalstellen sowie Text Blocks und die formatted-Methode.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

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 neuen String zurü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.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S