CodeGym /Kurse /JAVA 25 SELF /String-Formatierung

String-Formatierung

JAVA 25 SELF
Level 9 , Lektion 2
Verfügbar

1. Problem der manuellen Verkettung

Wenn Sie ein oder zwei Variablen ausgeben müssen, ist der Operator + tatsächlich praktisch. Doch wenn es viele Daten sind, wird das Verketten schnell chaotisch, besonders wenn Zahlen formatiert werden müssen (z. B. 2 Nachkommastellen) oder Zeilenumbrüche.

String name = "Oleg";
int age = 25;
double balance = 12345.67;

System.out.println("Name: " + name + ", Alter: " + age + ", Kontostand: " + balance + " Euro.");

Der Versuch, die Formatierung innerhalb der Verkettung „nachzujustieren“, verschlechtert nur die Lesbarkeit:

System.out.println("Name: " + name + ", Alter: " + age + ", Kontostand: " + String.format("%.2f", balance) + " Euro.");

Fazit: einfache Verkettung ist gut für Kleinigkeiten, aber für komplexe Nachrichten braucht man ein leistungsfähigeres Werkzeug – String.format().

2. String.format – Strings professionell formatieren

Die Methode String.format() ermöglicht es, einen String anhand einer Vorlage zu erzeugen und Werte an vorgegebenen Positionen einzusetzen.

Allgemeine Form:

String result = String.format("Vorlage", znacheniya);
  • %s – String
  • %d – Ganzzahl
  • %f – Gleitkommazahl
  • %n – Zeilenumbruch (plattformübergreifend)
String name = "Oleg";
int age = 25;
double balance = 12345.6789;

String info = String.format("Name: %s, Alter: %d, Kontostand: %.2f Euro.", name, age, balance);
System.out.println(info);
// Ausgabe: Name: Oleg, Alter: 25, Kontostand: 12345.68 Euro.

String result = String.format("Name: %s, Alter: %d, Kontostand: %.2f Euro", name, age, balance);
// %s – String, %d – Ganzzahl, %.2f – Zahl mit 2 Nachkommastellen

Zahlen und Strings formatieren

Gleitkommazahlen mit fester Genauigkeit:

double price = 99.999;
System.out.println(String.format("Preis: %.2f Euro.", price)); // Preis: 100.00 Euro.

Feldbreite und Ausrichtung:

int n = 7;
System.out.println(String.format("Zahl: [%5d]", n));   // Zahl: [    7]
System.out.println(String.format("Zahl: [%-5d]", n));  // Zahl: [7    ]

[5d] – Feldbreite 5, standardmäßig rechtsbündig;
[-5d] – Feldbreite 5, linksbündig.

Strings mit Ausrichtung:

String text = "Java";
System.out.println(String.format("[%10s]", text));  // [      Java]
System.out.println(String.format("[%-10s]", text)); // [Java      ]

Prozente:

double percent = 0.125;
System.out.println(String.format("Fertig: %.1f%%", percent * 100)); // Fertig: 12.5%

Um das Prozentzeichen auszugeben, verwenden Sie %%.

Datumsformatierung (kurz)

import java.util.Date;
Date now = new Date();
System.out.println(String.format("Heute: %tD", now)); // Heute: 06/18/24
System.out.println(String.format("Zeit: %tT", now));  // Zeit: 15:42:07

Lokalisierung und Trennzeichen

Standardmäßig wird die Locale des Systems verwendet. Um eine eigene festzulegen (z. B. ein Komma als Dezimaltrennzeichen), übergeben Sie eine Locale – zum Beispiel Locale.FRANCE.

import java.util.Locale;
double price = 1234.56;
System.out.println(String.format(Locale.FRANCE, "%.2f", price)); // 1234,56

Praxisbeispiele

Beispiel 1: Kurzer Bericht

String name = "Anna";
int tasks = 5;
double hours = 12.3456;

String report = String.format(
    "Mitarbeiter: %s%nErledigte Aufgaben: %d%nAufgewendete Stunden: %.1f",
    name, tasks, hours
);
System.out.println(report);

/* Ausgabe:
Mitarbeiter: Anna
Erledigte Aufgaben: 5
Aufgewendete Stunden: 12.3
*/

Beispiel 2: Tabelle mit Ausrichtung

String header = String.format("%-10s | %5s | %8s", "Name", "Punkte", "Zeit");
String row1 = String.format("%-10s | %5d | %8.2f", "Oleg", 95, 10.5);
String row2 = String.format("%-10s | %5d | %8.2f", "Anna", 100, 9.75);

System.out.println(header);
System.out.println(row1);
System.out.println(row2);

/* Ausgabe:
Name       | Punkte |     Zeit
Oleg       |    95 |    10.50
Anna       |   100 |     9.75
*/

Beispiel 3: Gemischter Text

int apples = 12;
int pears = 8;
System.out.println(String.format("Ich habe %d Äpfel und %d Birnen.", apples, pears));

3. Praxis: String-Formatierung in unserer Anwendung

Wir fügen einer Konsolenanwendung Formatierung hinzu: der Kontostand immer mit zwei Nachkommastellen, Zeilenumbrüche – über %n.

Scanner console = new Scanner(System.in);

System.out.print("Geben Sie den Namen ein: ");
String name = console.nextLine();

System.out.print("Geben Sie das Alter ein: ");
int age = console.nextInt();

System.out.print("Geben Sie den Kontostand ein: ");
double balance = console.nextDouble();

// Formatierte Ausgabe
String info = String.format("Name: %s, Alter: %d, Kontostand: %.2f Euro.", name, age, balance);
System.out.println(info);

Probieren Sie aus:

  • Geben Sie verschiedene Werte ein und prüfen Sie, dass der Kontostand immer mit zwei Nachkommastellen ausgegeben wird (%.2f).
  • Ändern Sie die Vorlage, um Zeilenumbrüche mit %n hinzuzufügen.

4. Häufige Fehler bei der String-Formatierung

Fehler Nr. 1: Typ und Platzhalter passen nicht zusammen.
Eine Zeichenkette darf nicht in %d und eine Zahl nicht in %s eingesetzt werden.

String.format("Alter: %d", "zwanzig"); // Fehler: Zahl erwartet, String übergeben

Fehler Nr. 2: Argumentreihenfolge vertauscht.
Die Vorlage %s %d, aber zuerst wird eine Zahl und dann ein String übergeben – das führt zu einem Fehler oder zu falscher Ausgabe.

Fehler Nr. 3: Locale ignoriert.
Sie erwarten ein Komma als Dezimaltrennzeichen, sehen aber einen Punkt – setzen Sie die gewünschte Locale explizit über den ersten Parameter von String.format(...).

Fehler Nr. 4: Unmaskiertes Prozentzeichen.
Um das Zeichen % auszugeben, verwenden Sie %%, sonst führt die Formatierung zu einem Fehler.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION