Bežné reťazcové operácie v Jave

1. Úvod

Hodnoty a operácie založené na reťazcoch sú v každodennom vývoji úplne bežné a každý vývojár Java musí byť schopný s nimi zaobchádzať.

V tomto tutoriáli poskytneme rýchly podvádzací list String operácie.

Ďalej objasníme rozdiely medzi nimi rovná sa a „==“ a medzi nimi StringUtils # isBlank a #je prázdny.

2. Transformácia znaku na reťazec

A char predstavuje jeden znak v Jave. Ale vo väčšine prípadov potrebujeme a String.

Začnime teda s transformáciou chars do Strings:

String toStringWithConcatenation (konečný znak c) {return String.valueOf (c); }

3. Pripojenie reťazcov

Ďalšou často potrebnou operáciou je pridanie reťazcov k iným hodnotám, napríklad a char:

Reťazec appendWithConcatenation (konečná predpona reťazca, konečná char c) {návratová predpona + c; }

Ďalšie základné typy môžeme pridať pomocou a StringBuilder tiež:

String appendWithStringBuilder (konečná predpona reťazca, konečná char c) {return new StringBuilder (prefix) .append (c) .toString (); }

4. Získanie znaku podľa indexu

Ak potrebujeme z reťazca extrahovať jeden znak, API poskytuje všetko, čo chceme:

char getCharacterByIndex (konečný text reťazca, konečný int index) {návratový text.charAt (index); }

Keďže a String používa a char [] ako podporná dátová štruktúra, index začína na nule.

5. Zaobchádzanie s hodnotami ASCII

Ľahko môžeme prepínať medzi a char a jeho číselné vyjadrenie (ASCII) pomocou obsadenia:

int asciiValue (konečný znakový znak) {návrat (int) znak; } char fromAsciiValue (konečná int hodnota) {Assert.isTrue (hodnota> = 0 && hodnota <65536, "hodnota nie je platný znak"); návratová (char) hodnota; }

Samozrejme, keďže int je 4 nepodpísané bajty a a char je 2 nepodpísané bajty, musíme skontrolovať, či pracujeme s hodnotami právneho charakteru.

6. Odstránenie všetkých medzier

Niekedy sa musíme zbaviť niektorých znakov, najčastejšie medzier. A dobrým spôsobom je použiť nahradiť všetko metóda s regulárnym výrazom:

Reťazec removeWhiteSpace (konečný text reťazca) {return text.replaceAll ("\ s +", ""); }

7. Pripojenie zbierok k reťazcu

Ďalším bežným prípadom použitia je, keď máme nejaký druh Zbierka a chcete z toho vytvoriť reťazec:

 Reťazec fromCollection (konečná kolekcia kolekcie) {return collection.stream (). Map (Objects :: toString) .collect (Collectors.joining (",")); }

Všimnite si, že Collectors.joining umožňuje určiť predponu alebo príponu.

8. Rozdelenie reťazca

Alebo na druhej strane môžeme reťazec rozdeliť oddeľovačom pomocou rozdeliť metóda:

Reťazec [] splitByRegExPipe (konečný text reťazca) vráti text.split ("\

Opäť tu používame regulárny výraz, ktorý je tento raz rozdelený na spojku. Pretože chceme použiť špeciálny znak, musíme mu uniknúť.

Ďalšou možnosťou je použitie Vzor trieda:

String [] splitByPatternPipe (konečný text reťazca) ")); 

9. Spracovanie všetkých znakov ako streamu

V prípade podrobného spracovania môžeme reťazec transformovať na IntStream:

IntStream getStream (konečný text reťazca) {return text.chars (); }

10. Referenčná rovnosť a hodnotová rovnosť

Aj keď struny vyzerajú ako a primitívny typ, nie sú.

Preto musíme rozlišovať medzi referenčnou a hodnotovou rovnosťou. Referenčná rovnosť vždy znamená hodnotovú rovnosť, ale vo všeobecnosti nie naopak. Prvý, ktorý skontrolujeme s operáciou „==“, a druhý, s rovná sa metóda:

@Test public void whenUsingEquals_thenWeCheckForTheSameValue () {assertTrue ("Hodnoty sú rovnaké", nový reťazec ("Test"). Equals ("Test")); } @Test public void whenUsingEqualsSign_thenWeCheckForReferenceEquality () {assertFalse ("Odkazy nie sú rovnaké", nový reťazec ("Test") == "Test"); }

Všimnite si, že literály sú internované v oblasti reťazcov. Preto ich kompilátor môže občas optimalizovať na rovnakú referenciu:

@Test public void whenTheCompileCanBuildUpAString_thenWeGetTheSameReference () {assertTrue ("Literály sú spojené reťazcom", "Test" == "Te" + "st"); }

11. Prázdny reťazec vs. prázdny reťazec

Je medzi nimi jemný rozdiel isBlank a je prázdny.

Reťazec je prázdny, ak je nulový alebo má dĺžku nulu. Zatiaľ čo reťazec je prázdny, ak má hodnotu Null alebo obsahuje iba medzery:

@Test public void whenUsingIsEmpty_thenWeCheckForNullorLengthZero () {assertTrue ("null je prázdny", isEmpty (null)); assertTrue ("nič nie je prázdne", isEmpty ("")); assertFalse ("medzery nie sú prázdne", isEmpty ("")); assertFalse ("medzery nie sú prázdne", isEmpty ("\ n")); assertFalse ("medzery nie sú prázdne", isEmpty ("\ t")); assertFalse ("text nie je prázdny", isEmpty ("Čokoľvek!")); } @Test public void whenUsingIsBlank_thenWeCheckForNullorOnlyContainingWhitespace () {assertTrue ("null is blank", isBlank (null)); assertTrue ("nič nie je prázdne", isBlank ("")); assertTrue ("medzery sú prázdne", isBlank ("\ t \ t \ t \ n \ r")); assertFalse ("test nie je prázdny", isBlank ("Čokoľvek!")); }

12. Záver

Struny sú základným typom vo všetkých druhoch aplikácií. V tomto tutoriáli sme sa naučili niektoré kľúčové operácie v bežných scenároch.

Ďalej sme dali pokyny k podrobnejším referenciám.

Nakoniec je celý kód so všetkými príkladmi k dispozícii v našom úložisku GitHub.