Convertir une chaîne en casse de titre

1. Introduction

Dans ce court didacticiel, nous montrerons comment convertir une chaîne au format de casse de titre en Java.

Nous montrerons différentes manières d'implémenter 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 à travers les caractères de chaîne

Une façon de convertir une chaîne en casse de titre consiste à parcourir tous les caractères de la chaîne .

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'à ce que nous atteignions 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éthode Character.toTitleCase pour effectuer la conversion, car elle vérifie l'équivalent de la casse du titre d'un Character en 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 la chaîne en mots, de convertir chaque mot en casse du titre et de joindre à nouveau tous les mots en utilisant le même séparateur de mots.

Voyons-le dans le code, en utilisant à nouveau l'espace blanc comme séparateur de mot, et l' API Stream 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. Utilisation d'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 cet article.

Cela fournit la classe WordUtils , qui a la méthode capitalizeFully () qui fait exactement ce que nous voulons réaliser:

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

Comme on peut le voir, c'est très simple à utiliser et si on le teste avec les mêmes entrées qu'avant on obtient les mêmes résultats:

This Is A Title This, Is A Title

De plus, la classe WordUtils fournit une autre méthode capitalize () qui fonctionne de la même manière que capitalizeFully (), sauf qu'elle ne modifie que le premier caractère de chaque mot . 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 le testons avec les mêmes entrées qu'avant, 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 prend en charge 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ée ici.

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

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 un BreakIterator spécifique pour travailler avec les titres. Si nous ne spécifions aucun BreakIterator, il utilise les valeurs par défaut d'Unicode , qui dans ce cas génèrent les mêmes résultats.

Notez également que cette méthode nous permet de spécifier les paramètres régionaux de la chaîne que nous convertissons afin d'effectuer une conversion spécifique aux paramètres régionaux.

5. Conclusion

Dans ce bref article, nous avons montré comment convertir une chaîne 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 disponible à l'adresse over sur GitHub.