Rövid útmutató a Java StringTokenizerhez

1. Áttekintés

Ebben a rövid cikkben a Java egyik alapvető osztályát - a StringTokenizer.

2. StringTokenizer

A StringTokenizer osztály segít szétválni Húrok több zsetonba.

StreamTokenizer hasonló funkcionalitást nyújt, de a tokenizálási módszer sokkal egyszerűbb, mint a StreamTokenizer osztály. Módszerei StringTokenizer ne különböztessen meg azonosítókat, számokat és idézett karakterláncokat, és ne ismerje fel és ne hagyja ki a megjegyzéseket.

Az elválasztók (a tokeneket elválasztó karakterek) halmaza megadható vagy a létrehozáskor, vagy jogkivonatonként.

3. A StringTokenizer

A használat legegyszerűbb példája StringTokenizer lesz osztani a Húr meghatározott elválasztók alapján.

Ebben a gyors példában felosztjuk a String argumentumot, és hozzáadjuk a tokeneket egy listához:

public list getTokens (String str) {List tokenek = new ArrayList (); StringTokenizer tokenizer = új StringTokenizer (str, ","); while (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); } visszatérési tokenek; } 

Figyelje meg, hogyan törjük meg Húr bekerül a tokenek listájába a határoló alapján ”,’. Ezután a hurokban, a tokens.add () módszer; minden tokent hozzáadunk a Tömb lista.

Például, ha a felhasználó aÜdvözöljük a baeldung.com oldalon", Ennek a metódusnak vissza kell adnia egy listát, amely háromszavas töredéket tartalmaz"Üdvözöljük“, “nak nek”És„baeldung.com“.

3.1. Java 8 megközelítés

Mivel StringTokenizer megvalósítja Felsorolás felületen, J-vel használhatjukava’S Gyűjtemények felület.

Ha a korábbi példát vesszük figyelembe, akkor a zsetonokkal ugyanazt a készletet lehívhatjuk Collections.list () módszer és Folyam API:

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

Itt haladunk el a StringTokenizer magát mint paramétert a Collections.list () módszer.

Megjegyzendő itt, hogy mivel a Felsorolás egy Tárgy type, be kell írnunk a tokenteket ide Húr típus (vagyis a megvalósítástól függ; ha használjuk Lista nak,-nek Egész / úszó akkor be kell írnunk Egész / úszó).

3.2. Változatai StringTokenizer

StringTokenizer két túlterhelt kivitelezővel érkezik az alapértelmezett kivitelező mellett: StringTokenizer (String str) és StringTokenizer (String str, String delim, logikai returnDelims):

StringTokenizer (String str, String delim, logikai returnDelims) vesz egy extrát logikai bemenet. Ha a logikai érték az igaz, azután StringTokenizer magát a határolót tokennek tekinti, és hozzáadja a belső tokenekhez.

StringTokenizer (String str) az előző példa parancsikonja; belsőleg meghívja a másik konstruktort kemény kódolású elválasztóval ”\ T \ n \ r \ f” és a logikai érték as hamis.

3.3. Token testreszabása

StringTokenizer szintén túlterhelt nextToken () metódus, amely egy string töredéket vesz be. Ez Húr a töredék külön elválasztó halmazként működik; amely alapján a tokenek ismét átszerveződnek.

Például, ha át tudjuk adni ae' ban,-ben nextToken () módszer a karakterlánc tovább bontására a „elválasztó” alapjáne‘:

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

Ezért egy adott „Helló, baeldung.com„A következő tokeneket állítjuk elő:

H llo ba ldung.com

3.4. Token hossza

A rendelkezésre álló tokenek számát felhasználhatjuk StringTokenizer’S méret módszer:

int tokenLength = tokens.size ();

3.5. Olvasás CSV fájlból

Most próbáljuk meg használni StringTokenizer valós használati esetben.

Vannak olyan esetek, amikor megpróbálunk adatokat olvasni a CSV fájlokból, és az adatokat a felhasználó által megadott elválasztó alapján elemezzük.

Használata StringTokenizer, könnyen eljuthatunk oda:

public list getTokensFromFile (String path, String delim) {List tokenek = new ArrayList (); String currLine = ""; StringTokenizer tokenizer; try (BufferedReader br = new BufferedReader (új InputStreamReader (Application.class.getResourceAsStream ("/" + elérési út)))) {while ((currLine = br.readLine ())! = null) {tokenizer = új StringTokenizer (currLine, elhatárolni); while (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); }}} catch (IOException e) {e.printStackTrace (); } visszatérési tokenek; }

Itt a függvénynek két argumentuma van; egyet CSV fájlnévként (azaz olvassa el az erőforrásokból [src -> main -> erőforrások] mappa), a másikat pedig elválasztóként.

E két argumentum alapján a CSV-adatok soronként kerülnek kiolvasásra, és minden sor használatával tokenizálódik StringTokenizer.

Például a következő tartalmat tettük fel a CSV-be:

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

Ezért a következő tokeneket kell létrehozni:

1 IND India 2 MY Malajzia 3 AU Ausztrália

3.6. Tesztelés

Készítsünk egy gyors tesztesetet:

nyilvános osztályú TokenizerTest {private MyTokenizer myTokenizer = new MyTokenizer (); private list várhatóTokensForString = Arrays.asList ("Welcome", "to", "baeldung.com"); privát lista várhatóTokensForFile = Arrays.asList ("1", "IND", "India", "2", "MY", "Malajzia", ​​"3", "AU", "Ausztrália"); @Test public void givenString_thenGetListOfString () {String str = "Welcome, to, baeldung.com"; Sorolja fel a actualTokens = myTokenizer.getTokens (str); assertEquals (várhatóTokensForString, ténylegesTokens); } @Test public void givenFile_thenGetListOfString () List actualTokens = myTokenizer.getTokensFromFile ("data.csv", "}

4. Következtetés

Ebben a gyors bemutatóban áttekintettünk néhány gyakorlati példát az alapvető Java használatáról StringTokenizer.

Mint mindig, a teljes forráskód is elérhető a GitHubon.