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.