Hurtig vejledning til Java StringTokenizer

1. Oversigt

I denne hurtige artikel undersøger vi en grundlæggende klasse i Java - StringTokenizer.

2. StringTokenizer

Det StringTokenizer klasse hjælper os med at splitte Strenge i flere tokens.

StreamTokenizer giver lignende funktionalitet, men tokeniseringsmetoden er meget enklere end den, der bruges af StreamTokenizer klasse. Metoder til StringTokenizer skel ikke mellem identifikatorer, tal og citerede strenge og genkend ikke og spring over kommentarer.

Sættet med afgrænsere (de tegn, der adskiller tokens) kan specificeres enten på oprettelsestidspunktet eller pr. Token-basis.

3. Brug af StringTokenizer

Det enkleste eksempel på brug StringTokenizer bliver at opdele en Snor baseret på specificerede afgrænsere.

I dette hurtige eksempel vil vi opdele argumentet String og tilføje tokens til en liste:

public List getTokens (String str) {List tokens = new ArrayList (); StringTokenizer tokenizer = ny StringTokenizer (str, ","); mens (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); } returnere tokens } 

Bemærk hvordan vi bryder Snor på listen over tokens baseret på afgrænser ','. Derefter i løkken ved hjælp af tokens.add () metode; vi tilføjer hvert token til ArrayList.

For eksempel, hvis en bruger giver input som “Velkommen til, baeldung.com“, Denne metode skal returnere en liste, der indeholder et tre-ords fragment som“Velkommen“, “til”Og“baeldung.com“.

3.1. Java 8-tilgang

Siden StringTokenizer redskaber Optælling interface, kan vi bruge det med Java'S Samlinger interface.

Hvis vi overvejer det tidligere eksempel, kan vi hente det samme sæt tokens ved hjælp af Collections.list () metode og Strøm API:

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

Her passerer vi StringTokenizer sig selv som en parameter i Collections.list () metode.

Punkt at bemærke her er, at siden Optælling er en Objekt type, skal vi typecaste tokens til Snor type (dvs. afhænger af implementeringen; hvis vi bruger Liste af Heltal / flyde så bliver vi nødt til at type-cast med Heltal / flyde).

3.2. Varianter af StringTokenizer

StringTokenizer leveres med to overbelastede konstruktører ved siden af ​​standardkonstruktøren: StringTokenizer (String str) og StringTokenizer (strengstreng, strengafgrænsning, boolsk returnDelims):

StringTokenizer (strengstreng, strengafgrænsning, boolsk returnDelims) tager en ekstra boolsk input. Hvis den boolsk værdi er rigtigt, derefter StringTokenizer betragter selve skillelinjen som et token og føjer det til sin interne pool af tokens.

StringTokenizer (String str) er en genvej til det foregående eksempel; det kalder internt den anden konstruktør med hårdkodet afgrænser som ”\ T \ n \ r \ f” og den boolske værdi som falsk.

3.3. Token-tilpasning

StringTokenizer leveres også med en overbelastet nextToken () metode, der tager et strengfragment som input. Det her Snor fragment fungerer som et ekstra sæt afgrænsere; baseret på hvilke tokens der omorganiseres igen.

For eksempel, hvis vi kan passere 'e'I nextToken () metode til yderligere at bryde strengen baseret på afgrænseren 'e‘:

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

Derfor for en given streng af 'Hej, baeldung.com‘Vi producerer følgende tokens:

H llo ba ldung.com

3.4. Token længde

For at tælle det tilgængelige antal tokens kan vi bruge StringTokenizer'S størrelse metode:

int tokenLength = tokens.size ();

3.5. Læsning fra CSV-fil

Lad os nu prøve at bruge StringTokenizer i en reel brugssag.

Der er scenarier, hvor vi forsøger at læse data fra CSV-filer og analysere dataene baseret på den brugerdefinerede afgrænser.

Ved brug af StringTokenizer, vi kan let komme derhen:

offentlig liste getTokensFromFile (streng sti, streng afgrænsning) {List tokens = new ArrayList (); String currLine = ""; StringTokenizer tokenizer; prøv (BufferedReader br = ny BufferedReader (ny InputStreamReader (Application.class.getResourceAsStream ("/" + sti)))) {mens ((currLine = br.readLine ())! = null) {tokenizer = ny StringTokenizer (currLine, afgrænsning); mens (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); }}} fangst (IOException e) {e.printStackTrace (); } returnere tokens }

Her tager funktionen to argumenter; en som CSV-filnavn (dvs. læses fra ressourcerne [src -> hoved -> ressourcer] mappe) og den anden som en afgrænser.

Baseret på disse to argumenter læses CSV-dataene linje for linje, og hver linje bliver tokeniseret ved hjælp af StringTokenizer.

For eksempel har vi anbragt følgende indhold i CSV:

1 | IND | Indien 2 | MY | Malaysia 3 | AU | Australien

Derfor skal følgende tokens genereres:

1 IND Indien 2 MY Malaysia 3 AU Australien

3.6. Testning

Lad os nu oprette en hurtig test case:

offentlig klasse TokenizerTest {privat MyTokenizer myTokenizer = ny MyTokenizer (); privat liste expectTokensForString = Arrays.asList ("Velkommen", "til", "baeldung.com"); privat liste forventetTokensForFile = Arrays.asList ("1", "IND", "Indien", "2", "MY", "Malaysia", "3", "AU", "Australien"); @Test offentlig ugyldighed givenString_thenGetListOfString () {String str = "Velkommen til, baeldung.com"; Liste actualTokens = myTokenizer.getTokens (str); assertEquals (expectTokensForString, actualTokens); } @Test offentlig ugyldighed givenFile_thenGetListOfString () Liste actualTokens = myTokenizer.getTokensFromFile ("data.csv", "}

4. Konklusion

I denne hurtige vejledning så vi nogle praktiske eksempler på brug af Java-kernen StringTokenizer.

Som altid er den fulde kildekode tilgængelig på GitHub.