Convertir une chaîne en cas de titre

Convertir une chaîne en cas de titre

1. introduction

Dans ce court didacticiel, nous allons montrer comment convertir unString au format de casse de titre en Java.

Nous montrerons différentes manières de mettre en œuvre une méthode personnalisée et nous montrerons également comment le faire à l'aide de bibliothèques tierces.

2. Solutions Java de base

2.1. Itération des caractèresString

Une façon de convertir unString en casse du titre consiste à parcourir tous les caractères desString.

Pour ce faire, lorsque nous trouvons un séparateur de mots, nous mettons en majuscule le caractère suivant. Après cela, nous changeons le reste des caractères en minuscules jusqu'à atteindre le séparateur de mots suivant.

Utilisons un espace blanc comme séparateur de mots et implémentons cette solution:

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();
}

Comme nous pouvons le voir, nous utilisons la méthodeCharacter.toTitleCase pour faire la conversion, puisqueit checks the title case equivalent of a Character in Unicode.

Si nous testons cette méthode en utilisant ces entrées:

tHis IS a tiTLe
tHis, IS a   tiTLe

Nous obtenons les résultats attendus suivants:

This Is A Title
This, Is A   Title

2.2. Se diviser en mots

Une autre approche pour ce faire est de diviser lesString en mots, de convertir chaque mot en casse du titre, et enfin de joindre à nouveau tous les mots en utilisant le même séparateur de mots.

Voyons cela dans le code, en utilisant à nouveau l'espace blanc comme séparateur de mot, et l'APIStream utile:

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));
}

En utilisant les mêmes entrées que précédemment, nous obtenons exactement les mêmes sorties:

This Is A Title
This, Is A   Title

3. Utiliser Apache Commons

Si nous ne voulons pas implémenter notre propre méthode personnalisée, nous pouvons utiliser la bibliothèque Apache Commons. La configuration de cette bibliothèque est expliquée dans cearticle.

Cela fournitthe WordUtils class, that has the capitalizeFully() method qui fait exactement ce que nous voulons réaliser:

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

Comme nous pouvons le constater, ceci est très facile à utiliser et si nous le testons avec les mêmes entrées que précédemment, nous obtenons les mêmes résultats:

This Is A Title
This, Is A   Title

De plus, la classeWordUtils fournitanother capitalize() method qui fonctionne de la même manière quecapitalizeFully(), saufonly changes the first character of each word. Cela signifie qu'il ne convertit pas le reste des caractères en minuscules.

Voyons comment nous pouvons utiliser ceci:

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

Maintenant, si nous testons avec les mêmes entrées que précédemment, nous obtenons ces différentes sorties:

THis IS A TiTLe
THis, IS A   TiTLe

4. Utilisation d'ICU4J

Une autre bibliothèque que nous pouvons utiliser est ICU4J, qui fournit le support Unicode et la globalisation.

Pour l'utiliser, nous devons ajouter cette dépendance à notre projet:


    com.ibm.icu
    icu4j
    61.1

La dernière version peut être trouvéehere.

Cette bibliothèque fonctionne de manière très similaire àWordUtils, mais nous pouvons spécifier unBreakIterator pour indiquer à la méthode comment nous voulons diviser lesString, et donc quels mots nous voulons convertir en titre Cas:

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

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

Comme nous pouvons le voir, ils ont unBreakIterator spécifique pour travailler avec les titres. If we don’t specify any BreakIterator it uses the defaults from Unicode, qui dans ce cas génèrent les mêmes résultats.

Notez également que cette méthode nous permet de spécifier leLocale of lesString que nous convertissons afin de faire une conversion spécifique à la locale.

5. Conclusion

Dans ce bref article, nous avons montré comment convertir unString au format de casse de titre en Java. Nous avons d'abord utilisé nos implémentations personnalisées, puis nous avons montré comment le faire à l'aide de bibliothèques externes.

Comme toujours, le code source complet des exemples est disponibleover on GitHub.