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

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

1. Vue d'ensemble

Dans cet article rapide, nous allons vérifier et discuter des différentes techniques pour supprimer le dernier caractère d'unString.

2. Utilisation deString.substring()

Le moyen le plus simple est d'utiliserthe built-in substring() method de la classeString.

Afin de supprimer le dernier caractère d'unString, donné, 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 la méthodelength() deString et en soustrayant1 du résultat.

Cependant,this method is not null-safe et si nous utilisons une chaîne vide, cela va échouer.

Pour résoudre les problèmes liés aux chaînes nulles et vides, nous pouvons envelopper la méthode dans une classe d'assistance:

public static String removeLastChar(String s) {
    return (s == null || s.length() == 0)
      ? null
      : (s.substring(0, s.length() - 1));
}

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 deStringUtils.substring()

Au lieu de réinventer la roue, nous pouvons utiliser la bibliothèqueStringUtils class from Apache Commons Lang3, qui offre des opérationsString utiles. L'un d'eux est unnull-safe substring() method, qui gère les exceptions.

Pour inclureStringUtils, nous devons mettre à jour notre fichierpom.xml:


    org.apache.commons
    commons-lang3
    3.0

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

String TEST_STRING = "abcdef";

StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);

Pourtant, cette opération n'est pas à nouveau sécurisée. Cela fonctionnera bien avec lesStringsvides.

4. Utilisation deStringUtils.chop()

StringUtils class provides the chop() method that works well with all edge scenarios: empty and null Strings.

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

StringUtils.chop(TEST_STRING);

5. Utiliser l'expression régulière

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

Par exemple, nous pouvons utiliser lereplaceAll() method of String class itself - qui prend deux paramètres: l'expression régulière et le remplacementString:

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

Notez que, comme nous appelons une méthode sur lesString, l'opération est, bien sûr,not null-safe.

De plus, l'expression dereplaceAll() et de regex peut être complexe à première vue. Vous pouvez en savoir plus sur regexhere, 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 unString se termine par une nouvelle ligne, la méthode ci-dessus échouera car“.” dans l'expression régulière correspond à n'importe quel caractère sauf pour les terminateurs de ligne.

Enfin, réécrivonsthe implementation with 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'unString - certains manuels, d'autres prêts à l'emploi.

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

Comme toujours, le code utilisé tout au long de l'article se trouveover on GitHub.