Cum se elimină ultimul caracter al unui șir?

1. Prezentare generală

În acest articol rapid, vom verifica și discuta diferite tehnici pentru eliminarea ultimului caracter al unui șir.

2. Utilizarea String.substring ()

Cel mai simplu mod este de a utiliza built-in subșir () metoda din String clasei.

Pentru a elimina ultimul caracter al unui șir dat , trebuie să folosim doi parametri: 0 ca index de pornire și indexul penultimului caracter. Putem realiza acest lucru apelând metoda String 's length () și scăzând 1 din rezultat.

Cu toate acestea, această metodă nu este null-safe și dacă folosim un șir gol, acesta va eșua.

Pentru a depăși problemele legate de șirurile nule și goale, putem înfășura metoda într-o clasă de ajutor:

public static String removeLastChar(String s) 

Putem refactoriza codul și putem utiliza 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. Utilizarea StringUtils.substring ()

În loc să reinventăm roata, putem folosi clasa StringUtils din biblioteca Apache Commons Lang3 , care oferă operații utile de tip String . Una dintre ele este o metodă null-safe substring () , care gestionează excepțiile.

Pentru a include StringUtils trebuie să actualizeze noastre pom.xml fișier:

 org.apache.commons commons-lang3 3.0 

StringUtils.substring () necesită trei parametri: un șir dat , un index al primului caracter (în cazul nostru va fi întotdeauna 0) și index al penultimului caracter. Din nou, putem folosi pur și simplu metoda length () și scăderea 1:

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

Cu toate acestea, această operațiune nu este din nou null-safe. Totuși, va funcționa cu șiruri goale .

4. Utilizarea StringUtils.chop ()

Clasa StringUtils oferă metoda chop () care funcționează bine cu toate scenariile marginale: șiruri goale și nule .

Este foarte ușor de utilizat și necesită un singur parametru: șirul. Singurul său scop este eliminarea ultimului personaj. Nimic mai mult, nimic mai puțin:

StringUtils.chop(TEST_STRING);

5. Utilizarea expresiei regulate

De asemenea, putem elimina ultimul caracter (sau orice număr de caractere) dintr-un șir folosind bine expresiile regulate.

De exemplu, putem folosi metoda replaceAll () a clasei String în sine - care ia doi parametri: expresia regulată și șirul de înlocuire :

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

Rețineți că, deoarece apelăm o metodă pe șir - operația nu este, desigur, null-safe .

De asemenea, replaceAll () și expresia regex pot fi complexe la prima vedere. Puteți citi mai multe despre regex aici, dar pentru a face logica puțin mai ușor de utilizat, o putem înfășura într-o clasă de ajutor:

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

Rețineți că, dacă un șir se termină cu o linie nouă, atunci metoda de mai sus va eșua ca „.” în regex se potrivește cu orice caracter cu excepția terminatorilor de linie.

În cele din urmă, să rescriem implementarea cu Java 8 :

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

6. Concluzie

În acest scurt articol, am discutat despre diferite moduri de a elimina doar ultimul caracter al unui șir - unele manuale, altele gata din cutie.

Și, dacă avem nevoie de mai multă flexibilitate și trebuie să eliminăm mai multe caractere, putem obține soluția mai avansată cu expresii regulate.

Ca întotdeauna, codul utilizat pe parcursul articolului poate fi găsit pe GitHub.