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: 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“. 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: 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). 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. 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‘: Dakle, za zadani niz "Pozdrav, baeldung.com'Proizvest ćemo sljedeće tokene: Možemo koristiti za brojanje dostupnog broja tokena StringTokenizer‘S veličina metoda: 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: 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: Stoga bi trebali biti generirani sljedeći tokeni: Sada, kreirajmo brzi testni slučaj: 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.javni popis getTokens (Niz str) {Oznake popisa = novi ArrayList (); StringTokenizer tokenizer = novi StringTokenizer (str, ","); while (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); } vratiti žetone; }
3.1. Pristup Java 8
javni popis getTokensWithCollection (String str) {return Collections.list (novi StringTokenizer (str, ",")). stream () .map (token -> (String) token) .collect (Collectors.toList ()); }
3.2. Varijante StringTokenizer
3.3. Prilagođavanje tokena
tokens.add (tokenizer.nextToken ("e"));
H llo ba ldung.com
3.4. Duljina žetona
int tokenLength = tokens.size ();
3.5. Čitanje iz CSV datoteke
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; }
1 | IND | Indija 2 | MOJ | Malezija 3 | AU | Australija
1 IND Indija 2 MOJA Malezija 3 AU Australija
3.6. Testiranje
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