Ako odstrániť posledný znak reťazca?

1. Prehľad

V tomto rýchlom článku sa chystáme skontrolovať a prediskutovať rôzne techniky odstraňovania posledného znaku a String.

2. Pomocou String.substring ()

Najjednoduchší spôsob je použitie zabudovaný podreťazec () metóda z String trieda.

S cieľom odstrániť posledný znak daného čísla Reťazec, musíme použiť dva parametre: 0 ako počiatočný index a index predposledného znaku. To môžeme dosiahnuť volaním String‘S dĺžka () metóda a odčítanie 1 z výsledku.

Avšak táto metóda nie je bezpečná z hľadiska nuly a ak použijeme prázdny reťazec, zlyhá.

Na prekonanie problémov s nulovými a prázdnymi reťazcami môžeme metódu zabaliť do triedy pomocníka:

verejný statický reťazec removeLastChar (reťazce s) 

Kód môžeme refaktorovať a použiť 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) )) .aleboElse (s); }

3. Používanie StringUtils.substring ()

Namiesto znovuobjavenia kolesa môžeme použiť StringUtils triedy od Apache Commons Lang3 knižnica, ktorá ponúka užitočné informácie String operácie. Jedným z nich je a bezpečné pre nuly podreťazec () metóda, ktorá rieši výnimky.

Zahrnúť StringUtils musíme aktualizovať náš pom.xml spis:

 org.apache.commons commons-lang3 3.0 

StringUtils.substring () vyžaduje tri parametre: daný Reťazec, index prvého znaku (v našom prípade to bude vždy 0) a index predposledného znaku. Opäť môžeme jednoducho použiť dĺžka () metóda a odčítať 1:

Reťazec TEST_STRING = "abcdef"; StringUtils.substring (TEST_STRING, 0, TEST_STRING.length () - 1);

Napriek tomu táto operácia nie je opäť bezpečná z hľadiska bezpečnosti. Bude to fungovať s prázdnymi Struny dobre hoci.

4. Používanie StringUtils.chop ()

StringUtils trieda poskytuje kotleta () metóda, ktorá funguje dobre so všetkými okrajovými scenármi: prázdne a nulové reťazce.

Jeho použitie je veľmi jednoduché a vyžaduje iba jeden parameter: String. Jeho jediným účelom je odstránenie posledného znaku. Nič viac, nič menej:

StringUtils.chop (TEST_STRING);

5. Používanie regulárneho výrazu

Môžeme tiež odstrániť posledný znak (alebo ľubovoľný počet znakov) z a String správnym používaním regulárnych výrazov.

Napríklad môžeme použiť nahradiť všetko() metóda String samotná trieda - ktorý má dva parametre: regulárny výraz a nahradenie String:

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

Všimnite si to, pretože voláme metódu na String - operácia je samozrejme nie je bezpečné pre nulovú hodnotu.

Tiež nahradiť všetko() a regulárny výraz môže byť na prvý pohľad zložitý. Viac informácií o regulárnom výraze si môžete prečítať tu, ale aby bola logika trochu užívateľsky príjemnejšia, môžeme ju zabaliť do triedy pomocníka:

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

Upozorňujeme, že ak a String končí novým riadkom, potom vyššie uvedená metóda zlyhá ako “.” v regulárnom výraze sa zhoduje s ľubovoľným znakom okrem ukončovacích riadkov.

Na záver poďme znovu napísať implementácia s Java 8:

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

6. Záver

V tomto krátkom článku sme diskutovali o rôznych spôsoboch odstránenia iba posledného znaku a String - niekto manuál, niekto pripravený po vybalení z krabice.

A ak potrebujeme väčšiu flexibilitu a potrebujeme odstrániť viac znakov, môžeme vytvoriť pokročilejšie riešenie s regulárnymi výrazmi.

Ako vždy, kód použitý v tomto článku nájdete na GitHub.