Das Padding von Strings, also das Auffüllen eines Strings mit Leerzeichen oder anderen Zeichen auf eine vorgegebene Länge, ist ein häufiges Problem in der Softwareentwicklung. Es wird oft benötigt, um konsistente Textausgaben zu gewährleisten, wie beispielsweise beim Formatieren von Tabellen oder beim Erstellen von Berichten. Dieser Artikel beleuchtet verschiedene Möglichkeiten, Strings in Java zu paddieren, und stellt für die Java-Versionen 8, 11 und 17 die jeweils elegantesten Lösungen vor.


Was ist String Padding?

String Padding bezeichnet das Auffüllen eines Strings auf eine bestimmte Mindestlänge, wobei der ursprüngliche Inhalt erhalten bleibt. Dies kann auf zwei Arten erfolgen:

  1. Linksbündiges Padding: Das Auffüllen erfolgt auf der rechten Seite des Strings.
  2. Rechtsbündiges Padding: Das Auffüllen erfolgt auf der linken Seite des Strings.

Außerdem kann der Auffüllcharakter entweder ein Leerzeichen oder ein beliebiges anderes Zeichen sein.


String Padding in Java 8

Java 8 bietet keine direkte API für das Padding von Strings, sodass eigene Implementierungen oder externe Bibliotheken verwendet werden müssen.

1. Manuelles Padding mit Schleifen

Die einfachste Methode besteht darin, eine Schleife zu verwenden, um das Ziel-String-Padding zu erzeugen:

public static String padRight(String input, int length, char paddingChar) {
    if (input.length() >= length) {
        return input;
    }
    StringBuilder sb = new StringBuilder(input);
    while (sb.length() < length) {
        sb.append(paddingChar);
    }
    return sb.toString();
}

public static String padLeft(String input, int length, char paddingChar) {
    if (input.length() >= length) {
        return input;
    }
    StringBuilder sb = new StringBuilder();
    while (sb.length() + input.length() < length) {
        sb.append(paddingChar);
    }
    sb.append(input);
    return sb.toString();
}
Code-Sprache: JavaScript (javascript)

2. Padding mit String.format

Das String.format-API kann für rechtsbündiges Padding mit Leerzeichen genutzt werden. Es ist jedoch eingeschränkt, da nur Leerzeichen als Padding-Charakter unterstützt werden:

public static String padRightWithFormat(String input, int length) {
    return String.format("%-" + length + "s", input);
}

public static String padLeftWithFormat(String input, int length) {
    return String.format("%" + length + "s", input);
}
Code-Sprache: JavaScript (javascript)

3. Padding mit externen Bibliotheken

Eine gängige Alternative ist die Verwendung von Apache Commons Lang (StringUtils):

import org.apache.commons.lang3.StringUtils;

public static String padRightWithCommons(String input, int length, char paddingChar) {
    return StringUtils.rightPad(input, length, paddingChar);
}

public static String padLeftWithCommons(String input, int length, char paddingChar) {
    return StringUtils.leftPad(input, length, paddingChar);
}
Code-Sprache: JavaScript (javascript)

Die Nutzung von Apache Commons ist besonders elegant, da sie klar lesbare Methoden mit hoher Funktionalität bietet.

Empfehlung für Java 8:
Die Verwendung von Apache Commons Lang ist am elegantesten, da der Code einfach zu schreiben und gut wartbar ist.


String Padding in Java 11

Mit Java 11 wurde die Methode String.repeat eingeführt, die das Padding wesentlich vereinfacht.

1. Padding mit String.repeat

Eine eigene Implementierung mit der repeat-Methode ist sehr flexibel:

public static String padRight(String input, int length, char paddingChar) {
    int paddingLength = Math.max(0, length - input.length());
    return input + String.valueOf(paddingChar).repeat(paddingLength);
}

public static String padLeft(String input, int length, char paddingChar) {
    int paddingLength = Math.max(0, length - input.length());
    return String.valueOf(paddingChar).repeat(paddingLength) + input;
}
Code-Sprache: JavaScript (javascript)

2. Kombination mit String.format

Die Kombination aus repeat und String.format kann für komplexere Szenarien genutzt werden, ist aber oft unnötig, da repeat alleine ausreichend ist.

Empfehlung für Java 11:
Die Nutzung von String.repeat ist die eleganteste Lösung, da sie direkt in der Standardbibliothek enthalten ist und keine externen Abhängigkeiten erfordert.


String Padding in Java 17

Java 17 bietet keine neuen speziellen Methoden für Padding, jedoch kann die String.repeat-Methode aus Java 11 weiterhin genutzt werden. Außerdem können Muster (Pattern) für anspruchsvolle Padding-Szenarien verwendet werden.

1. Padding mit String.repeat

Die Implementierung ist identisch mit Java 11 und bleibt die bevorzugte Lösung.

2. Padding mit regulären Ausdrücken

Für spezielle Fälle, in denen Padding mit bestimmten Mustern kombiniert werden muss, können reguläre Ausdrücke verwendet werden. Beispiel:

public static String padWithPattern(String input, int length, String paddingPattern) {
    int paddingLength = Math.max(0, length - input.length());
    String padding = paddingPattern.repeat((int) Math.ceil(paddingLength / (double) paddingPattern.length()))
                                    .substring(0, paddingLength);
    return input + padding;
}
Code-Sprache: JavaScript (javascript)

3. Benutzerdefinierte Utility-Klassen

Da Java 17 LTS ist und in vielen Projekten langfristig genutzt wird, ist es sinnvoll, Utility-Klassen für String-Operationen zu erstellen.

Empfehlung für Java 17:
String.repeat bleibt die eleganteste Lösung. Reguläre Ausdrücke und Utility-Klassen sind für spezifische Szenarien hilfreich.


Fazit

String Padding kann in Java auf verschiedene Arten umgesetzt werden. Mit neueren Java-Versionen stehen einfachere und elegantere Lösungen zur Verfügung:

  • Java 8: Manuelles Padding mit Schleifen oder Apache Commons Lang (StringUtils).
  • Java 11: Nutzung der String.repeat-Methode für flexible und elegante Lösungen.
  • Java 17: Weiterhin String.repeat; für komplexere Szenarien können reguläre Ausdrücke oder Utility-Klassen hinzugezogen werden.

Die Entwicklung von Java zeigt, wie kontinuierliche Verbesserungen die Programmierung erleichtern. Für die meisten Fälle ist die Verwendung von String.repeat ab Java 11 der bevorzugte Ansatz. In älteren Versionen bietet Apache Commons Lang eine gute Alternative.