Kratki vodič za Java StringTokenizer

1. Pregled

U ovom brzom članku istražit ćemo temeljnu klasu u Javi - StringTokenizer.

2. StringTokenizer

The StringTokenizer razred nam pomaže podijeliti se Žice u više tokena.

StreamTokenizer pruža sličnu funkcionalnost, ali metoda tokenizacije mnogo je jednostavnija od one koju koristi StreamTokenizer razred. Metode StringTokenizer ne razlikuju identifikatore, brojeve i citirane nizove, niti prepoznaju i preskaču komentare.

Skup graničnika (znakovi koji odvajaju tokene) može se navesti ili u vrijeme izrade ili na osnovi žetona.

3. Korištenje StringTokenizer

Najjednostavniji primjer korištenja StringTokenizer bit će podijeliti a Niz na temelju određenih graničnika.

U ovom brzom primjeru podijelit ćemo argument String i dodati tokene na popis:

javni popis getTokens (Niz str) {Oznake popisa = novi ArrayList (); StringTokenizer tokenizer = novi StringTokenizer (str, ","); while (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); } vratiti žetone; } 

Primijetite kako razbijamo Niz na popis tokena na temelju graničnika ',‘. Zatim u petlju, koristeći tokens.add () metoda; dodajemo svaki žeton u ArrayList.

Na primjer, ako korisnik daje unos kao „Dobrodošli na, baeldung.com“, Ova bi metoda trebala vratiti popis koji sadrži fragment od tri riječi kao„Dobrodošli“, “do"I"baeldung.com“.

3.1. Pristup Java 8

Od StringTokenizer provodi Nabrajanje sučelje, možemo ga koristiti s Java‘S Zbirke sučelje.

Ako uzmemo u obzir raniji primjer, možemo dobiti isti skup tokena pomoću Collections.list () metoda i Stream API:

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

Evo, prolazimo StringTokenizer sam kao parametar u Collections.list () metoda.

Ovdje treba napomenuti da je, budući da Nabrajanje je Objekt tipa, trebamo ubaciti žetone Niz tip (tj. ovisi o provedbi; ako koristimo Popis od Cijeli broj / Float tada ćemo morati tipkati s Cijelo / plutajuće).

3.2. Varijante StringTokenizer

StringTokenizer dolazi s dva preopterećena konstruktora pored zadanog konstruktora: StringTokenizer (String str) i StringTokenizer (String str, String delim, boolean returnDelims):

StringTokenizer (String str, String delim, boolean returnDelims) uzima dodatni boolean ulazni. Ako je boolean vrijednost je pravi, onda StringTokenizer sam razgraničnik smatra tokenom i dodaje ga u svoj unutarnji fond tokena.

StringTokenizer (String str) je prečac za prethodni primjer; interno naziva drugi konstruktor s teško kodiranim graničnikom kao ”\ T \ n \ r \ f” a logička vrijednost kao lažno.

3.3. Prilagođavanje tokena

StringTokenizer također dolazi s preopterećenim nextToken () metoda koja uzima fragment niza kao ulaz. Ovaj Niz fragment djeluje kao dodatni set graničnika; na temelju kojih se tokeni ponovno organiziraju.

Na primjer, ako možemo proći ‘e'U nextToken () metoda za daljnje prekidanje niza na temelju graničnika 'e‘:

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

Dakle, za zadani niz "Pozdrav, baeldung.com'Proizvest ćemo sljedeće tokene:

H llo ba ldung.com

3.4. Duljina žetona

Možemo koristiti za brojanje dostupnog broja tokena StringTokenizer‘S veličina metoda:

int tokenLength = tokens.size ();

3.5. Čitanje iz CSV datoteke

Pokušajmo sada koristiti StringTokenizer u stvarnom slučaju upotrebe.

Postoje scenariji u kojima pokušavamo pročitati podatke iz CSV datoteka i raščlaniti podatke na temelju korisničkog graničnika.

Koristeći StringTokenizer, možemo lako doći:

javni popis getTokensFromFile (Staza niza, razgraničenje niza) {Oznake popisa = novi ArrayList (); Niz currLine = ""; StringTokenizer tokenizer; try (BufferedReader br = new BufferedReader (new InputStreamReader (Application.class.getResourceAsStream ("/" + path)))) {while ((currLine = br.readLine ())! = null) {tokenizer = new StringTokenizer (currLine, razgraničiti); while (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); }}} catch (IOException e) {e.printStackTrace (); } vratiti žetone; }

Ovdje funkcija uzima dva argumenta; jedan kao naziv CSV datoteke (tj. čita se iz izvora [src -> glavna -> resursi] mapa), a druga kao graničnik.

Na temelju ova dva argumenta, CSV podaci čitaju se redak po redak, a svaki se redak tokenizira pomoću StringTokenizer.

Na primjer, u CSV smo stavili sljedeći sadržaj:

1 | IND | Indija 2 | MOJ | Malezija 3 | AU | Australija

Stoga bi trebali biti generirani sljedeći tokeni:

1 IND Indija 2 MOJA Malezija 3 AU Australija

3.6. Testiranje

Sada, kreirajmo brzi testni slučaj:

javna klasa TokenizerTest {privatni MyTokenizer myTokenizer = novi MyTokenizer (); privatni popis očekuje seTokensForString = Arrays.asList ("Dobrodošli", "na", "baeldung.com"); privatni popis očekuje seTokensForFile = Arrays.asList ("1", "IND", "India", "2", "MY", "Malezija", "3", "AU", "Australia"); @Test javna praznina givenString_thenGetListOfString () {String str = "Dobrodošli na, baeldung.com"; Navesti stvarne tokene = myTokenizer.getTokens (str); assertEquals (očekivani TokensForString, stvarni Tokens); } @Test javna praznina givenFile_thenGetListOfString () Popis stvarnih Tokens = myTokenizer.getTokensFromFile ("data.csv", "}

4. Zaključak

U ovom smo brzom vodiču pogledali nekoliko praktičnih primjera korištenja jezgre Java StringTokenizer.

Kao i uvijek, puni izvorni kod dostupan je na GitHub-u.