Stručný sprievodca Java StringTokenizer

1. Prehľad

V tomto rýchlom článku sa pozrieme na základnú triedu v jazyku Java - StringTokenizer.

2. StringTokenizer

The StringTokenizer trieda nám pomáha rozdeliť sa Struny do viacerých žetónov.

StreamTokenizer poskytuje podobnú funkcionalitu, ale metóda tokenizácie je oveľa jednoduchšia ako metóda používaná StreamTokenizer trieda. Metódy StringTokenizer nerozlišujte medzi identifikátormi, číslami a reťazcami v úvodzovkách, ani nerozpoznávajte a nepreskakujte komentáre.

Množinu oddeľovačov (znaky, ktoré oddeľujú tokeny) je možné určiť buď pri vytvorení, alebo na základe tokenov.

3. Pomocou StringTokenizer

Najjednoduchší príklad použitia StringTokenizer bude rozdeliť a String na základe určených oddeľovačov.

V tomto rýchlom príklade rozdelíme argument String a pridáme tokeny do zoznamu:

public List getTokens (String str) {List tokens = new ArrayList (); StringTokenizer tokenizer = nový StringTokenizer (str, ","); while (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); } návratové tokeny; } 

Všimnite si, ako rozbíjame String do zoznamu tokenov na základe oddeľovača ‘,„. Potom v slučke pomocou tokens.add () metóda; pridávame každý token do ArrayList.

Napríklad ak používateľ zadá údaj ako „Vitajte na, baeldung.com„, Táto metóda by mala vrátiť zoznam obsahujúci trojslovný fragment ako„Vitajte“, “do“A„baeldung.com“.

3.1. Prístup Java 8

Odkedy StringTokenizer náradie Vymenovanie rozhranie, môžeme ho použiť s Java‘S Zbierky rozhranie.

Ak vezmeme do úvahy predchádzajúci príklad, môžeme získať rovnakú sadu tokenov pomocou Zbierka.list () metóda a Prúd API:

public List getTokensWithCollection (String str) {return Collections.list (new StringTokenizer (str, ",")). stream () .map (token -> (String) token) .collect (Collectors.toList ()); }

Tu prechádzame okolo StringTokenizer sám o sebe ako parameter v Zbierka.list () metóda.

Tu je potrebné poznamenať, že keďže Vymenovanie je Objekt typu, musíme typovo odhodiť žetóny String typu (t. j. závisí od implementácie; ak použijeme Zoznam z Celé číslo / plávajúce potom budeme musieť typ-cast s Celé číslo / plávajúce).

3.2. Varianty StringTokenizer

StringTokenizer prichádza s dvoma preťaženými konštruktormi vedľa predvoleného konštruktora: StringTokenizer (reťazec str) a StringTokenizer (String str, oddeľovač reťazcov, boolean returnDelims):

StringTokenizer (reťazec str, oddeľovač reťazcov, boolean returnDelims) berie navyše boolovský vstup. Ak boolovský hodnota je pravdapotom StringTokenizer považuje samotný oddeľovač za token a pridá ho do svojej internej skupiny tokenov.

StringTokenizer (reťazec str) je skratka pre predchádzajúci príklad; interne volá druhého konštruktora s pevne oddeľovačom ako „\ T \ n \ r \ f“ a boolovská hodnota ako nepravdivé.

3.3. Prispôsobenie tokenov

StringTokenizer prichádza aj s preťaženým nextToken () metóda, ktorá ako vstup použije fragment reťazca. Toto String fragment funguje ako ďalšia sada oddeľovačov; na základe ktorých sa znova usporiadajú tokeny.

Napríklad, ak dokážeme prejsť ‘e„V nextToken () metóda na ďalšie prelomenie reťazca na základe oddeľovača ‘e‘:

tokens.add (tokenizer.nextToken ("e"));

Preto pre daný reťazec ‘Dobrý deň, baeldung.com„Vyrobíme tieto žetóny:

H llo ba ldung.com

3.4. Dĺžka tokenu

Na spočítanie dostupného počtu žetónov môžeme použiť StringTokenizer‘S veľkosť metóda:

int tokenLength = tokens.size ();

3.5. Čítanie zo súboru CSV

Teraz to skúsme použiť StringTokenizer v prípade skutočného použitia.

Existujú scenáre, keď sa pokúsime načítať údaje zo súborov CSV a analyzovať ich na základe oddeľovača daného používateľom.

Použitím StringTokenizer, môžeme sa tam ľahko dostať:

public List getTokensFromFile (cesta reťazca, ohraničenie reťazca) {List tokens = new ArrayList (); Reťazec currentLine = ""; Tokenizer StringTokenizer; try (BufferedReader br = new BufferedReader (new InputStreamReader (Application.class.getResourceAsStream ("/" + path)))) {while ((currentLine = br.readLine ())! = null) {tokenizer = new StringTokenizer (currentLine, delim); while (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); }}} chytit (IOException e) {e.printStackTrace (); } návratové tokeny; }

Tu funkcia trvá dva argumenty; jeden ako názov súboru CSV (t. j. načítaný zo zdrojov [src -> hlavné -> zdroje] priečinok) a druhý ako oddeľovač.

Na základe týchto dvoch argumentov sa údaje CSV načítajú riadok po riadku a každý riadok sa tokenizuje pomocou StringTokenizer.

Do súboru CSV sme napríklad vložili nasledujúci obsah:

1 | IND | India 2 | MY | Malajzia 3 | AU | Austrália

Mali by sa preto generovať nasledujúce tokeny:

1 IND India 2 MY Malajzia 3 AU Austrália

3.6. Testovanie

Poďme si teraz vytvoriť rýchly testovací prípad:

verejná trieda TokenizerTest {private MyTokenizer myTokenizer = nový MyTokenizer (); private List expectTokensForString = Arrays.asList ("Vitajte", "na", "baeldung.com"); private List expectTokensForFile = Arrays.asList ("1", "IND", "India", "2", "MY", "Malajzia", ​​"3", "AU", "Austrália"); @Test public void givenString_thenGetListOfString () {String str = "Vitajte na, baeldung.com"; Zoznam actualTokens = myTokenizer.getTokens (str); assertEquals (expectTokensForString, actualTokens); } @Test public void givenFile_thenGetListOfString () List actualTokens = myTokenizer.getTokensFromFile ("data.csv", "}

4. Záver

V tomto rýchlom výučbe sme sa pozreli na niekoľko praktických príkladov použitia jadra Java StringTokenizer.

Celý zdrojový kód je ako vždy k dispozícii na GitHub.