Konvertieren Sie einen String in Titelkoffer

Konvertieren Sie eine Zeichenfolge in Groß- / Kleinschreibung

1. Einführung

In diesem kurzen Tutorial zeigen wir, wie SieString in Java in das Titelformat konvertieren.

Wir zeigen verschiedene Möglichkeiten zum Implementieren einer benutzerdefinierten Methode und zeigen, wie dies mithilfe von Bibliotheken von Drittanbietern durchgeführt wird.

2. Java-Kernlösungen

2.1. Durch dieString Zeichen iterieren

Eine Möglichkeit, einString in eine Groß- / Kleinschreibung umzuwandeln, besteht darin, alle Zeichen desString zu durchlaufen.

Um dies zu tun, setzen wir das nächste Zeichen in Großbuchstaben, wenn wir ein Worttrennzeichen finden. Danach ändern wir den Rest der Zeichen in Kleinbuchstaben, bis wir das nächste Worttrennzeichen erreichen.

Verwenden wir einen Leerraum als Worttrennzeichen und implementieren diese Lösung:

public static String convertToTitleCaseIteratingChars(String text) {
    if (text == null || text.isEmpty()) {
        return text;
    }

    StringBuilder converted = new StringBuilder();

    boolean convertNext = true;
    for (char ch : text.toCharArray()) {
        if (Character.isSpaceChar(ch)) {
            convertNext = true;
        } else if (convertNext) {
            ch = Character.toTitleCase(ch);
            convertNext = false;
        } else {
            ch = Character.toLowerCase(ch);
        }
        converted.append(ch);
    }

    return converted.toString();
}

Wie wir sehen können, verwenden wir die MethodeCharacter.toTitleCase, um die Konvertierung durchzuführen, dait checks the title case equivalent of a Character in Unicode.

Wenn wir diese Methode mit diesen Eingaben testen:

tHis IS a tiTLe
tHis, IS a   tiTLe

Wir erhalten die folgenden erwarteten Ergebnisse:

This Is A Title
This, Is A   Title

2.2. In Worte teilen

Ein anderer Ansatz, um dies zu tun, besteht darin, dieString in Wörter aufzuteilen, jedes Wort in eine Groß- und Kleinschreibung umzuwandeln und schließlich alle Wörter erneut mit demselben Worttrennzeichen zu verbinden.

Sehen wir es uns im Code an und verwenden erneut den Leerraum als Worttrennzeichen und die hilfreicheStream-API:

private static final String WORD_SEPARATOR = " ";

public static String convertToTitleCaseSplitting(String text) {
    if (text == null || text.isEmpty()) {
        return text;
    }

    return Arrays
      .stream(text.split(WORD_SEPARATOR))
      .map(word -> word.isEmpty()
        ? word
        : Character.toTitleCase(word.charAt(0)) + word
          .substring(1)
          .toLowerCase())
      .collect(Collectors.joining(WORD_SEPARATOR));
}

Mit denselben Eingaben wie zuvor erhalten wir genau dieselben Ausgaben:

This Is A Title
This, Is A   Title

3. Verwenden von Apache Commons

Falls wir keine eigene benutzerdefinierte Methode implementieren möchten, können wir die Apache Commons-Bibliothek verwenden. Das Setup für diese Bibliothek wird inarticle erläutert.

Dies liefertthe WordUtils class, that has the capitalizeFully() method, die genau das tun, was wir erreichen wollen:

public static String convertToTileCaseWordUtilsFull(String text) {
    return WordUtils.capitalizeFully(text);
}

Wie wir sehen können, ist dies sehr einfach zu bedienen und wenn wir es mit den gleichen Eingaben wie zuvor testen, erhalten wir die gleichen Ergebnisse:

This Is A Title
This, Is A   Title

Außerdem liefert die KlasseWordUtilsanother capitalize() method, die ähnlich wiecapitalizeFully(), funktioniert, außer dassonly changes the first character of each word. Dies bedeutet, dass der Rest der Zeichen nicht in Kleinbuchstaben umgewandelt wird.

Mal sehen, wie wir das nutzen können:

public static String convertToTileCaseWordUtils(String text) {
    return WordUtils.capitalize(text);
}

Wenn wir es nun mit denselben Eingaben wie zuvor testen, erhalten wir diese verschiedenen Ausgaben:

THis IS A TiTLe
THis, IS A   TiTLe

4. Verwenden von ICU4J

Eine weitere Bibliothek, die wir verwenden können, ist ICU4J, die Unterstützung für Unicode und Globalisierung bietet.

Um es zu benutzen, müssen wir diese Abhängigkeit zu unserem Projekt hinzufügen:


    com.ibm.icu
    icu4j
    61.1

Die neueste Version finden Sie unterhere.

Diese Bibliothek funktioniert sehr ähnlich wieWordUtils, aber wir könnenBreakIterator angeben, um der Methode mitzuteilen, wie dieString aufgeteilt werden sollen und welche Wörter wir daher in Titel konvertieren möchten Fall:

public static String convertToTitleCaseIcu4j(String text) {
    if (text == null || text.isEmpty()) {
        return text;
    }

    return UCharacter.toTitleCase(text, BreakIterator.getTitleInstance());
}

Wie wir sehen können, haben sie ein bestimmtesBreakIterator, um mit Titeln zu arbeiten. If we don’t specify any BreakIterator it uses the defaults from Unicode, die in diesem Fall die gleichen Ergebnisse erzeugen.

Beachten Sie außerdem, dass wir mit dieser MethodeLocale undStringangeben können, die wir konvertieren, um eine länderspezifische Konvertierung durchzuführen.

5. Fazit

In diesem kurzen Artikel haben wir gezeigt, wie einStringin Java in das Groß- und Kleinschreibung konvertiert wird. Wir haben zuerst unsere benutzerdefinierten Implementierungen verwendet und danach gezeigt, wie dies mithilfe externer Bibliotheken geschieht.

Wie immer ist der vollständige Quellcode der Beispieleover on GitHub verfügbar.