Comment supprimer le dernier caractère d'une chaîne?

1. Vue d'ensemble

Dans cet article rapide, nous allons vérifier et discuter de différentes techniques pour supprimer le dernier caractère d'une chaîne.

2. Utilisation de String.substring ()

Le moyen le plus simple consiste à utiliser la méthode intégrée substring () de la classe String .

Afin de supprimer le dernier caractère d'une chaîne donnée , nous devons utiliser deux paramètres: 0 comme index de départ et index de l'avant-dernier caractère. Nous pouvons y parvenir en appelant à cordes de longueur () méthode et en soustrayant 1 du résultat.

Cependant, cette méthode n'est pas sûre pour les valeurs nulles et si nous utilisons une chaîne vide, cela échouera.

Pour surmonter les problèmes avec les chaînes nulles et vides, nous pouvons envelopper la méthode dans une classe d'assistance:

public static String removeLastChar(String s) 

Nous pouvons refactoriser le code et utiliser Java 8:

public static String removeLastCharOptional(String s) { return Optional.ofNullable(s) .filter(str -> str.length() != 0) .map(str -> str.substring(0, str.length() - 1)) .orElse(s); }

3. Utilisation de StringUtils.substring ()

Au lieu de réinventer la roue, nous pouvons utiliser StringUtils classe d'Apache Commons Lang3 bibliothèque qui offre utile chaîne des opérations. L'une d'elles est une méthode substring () de sécurité nulle , qui gère les exceptions.

Pour inclure StringUtils, nous devons mettre à jour notre fichier pom.xml :

 org.apache.commons commons-lang3 3.0 

StringUtils.substring () nécessite trois paramètres: une String donnée , un index du premier caractère (dans notre cas, il sera toujours 0) et l'index de l'avant-dernier caractère. Encore une fois, nous pouvons simplement utiliser la méthode length () et soustraire 1:

String TEST_STRING = "abcdef"; StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);

Pourtant, cette opération n'est pas à nouveau sûre pour les valeurs nulles. Cela fonctionnera bien avec des chaînes vides .

4. Utilisation de StringUtils.chop ()

La classe StringUtils fournit la méthode chop () qui fonctionne bien avec tous les scénarios de bord: chaînes vides et nulles .

Il est très simple d'utilisation et ne nécessite qu'un seul paramètre: la chaîne. Son seul but est de supprimer le dernier caractère. Ni plus ni moins:

StringUtils.chop(TEST_STRING);

5. Utilisation d'une expression régulière

Nous pouvons également supprimer le dernier caractère (ou n'importe quel nombre de caractères) d'une chaîne en utilisant à bon escient les expressions régulières.

Par exemple, nous pouvons utiliser la méthode replaceAll () de la classe String elle - même - qui prend deux paramètres: l'expression régulière et la chaîne de remplacement :

TEST_STRING.replaceAll(".$", "");

Notez que, parce que nous appelons une méthode sur la chaîne , l'opération n'est bien sûr pas sûre pour les valeurs nulles .

En outre, replaceAll () et l'expression regex peuvent être complexes à première vue. Vous pouvez en savoir plus sur regex ici, mais pour rendre la logique un peu plus conviviale, nous pouvons l'envelopper dans une classe d'assistance:

public static String removeLastCharRegex(String s) { return (s == null) ? null : s.replaceAll(".$", ""); }

Notez que si une chaîne se termine par une nouvelle ligne, la méthode ci-dessus échouera en tant que "." dans regex correspond à n'importe quel caractère sauf pour les terminateurs de ligne.

Enfin, réécrivons l'implémentation avec Java 8 :

public static String removeLastCharRegexOptional(String s) { return Optional.ofNullable(s) .map(str -> str.replaceAll(".$", "")) .orElse(s); }

6. Conclusion

Dans ce court article, nous avons discuté de différentes façons de supprimer uniquement le dernier caractère d'une chaîne - certains manuels, certains prêts à l'emploi.

Et, si nous avons besoin de plus de flexibilité et que nous devons supprimer plus de caractères, nous pouvons la solution la plus avancée avec des expressions régulières.

Comme toujours, le code utilisé tout au long de l'article se trouve à l'adresse over sur GitHub.