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.