Hurtigguide til Java StringTokenizer

1. Oversikt

I denne raske artikkelen vil vi utforske en grunnleggende klasse i Java - StringTokenizer.

2. StringTokenizer

De StringTokenizer klasse hjelper oss å splitte Strenger i flere tokens.

StreamTokenizer gir lignende funksjonalitet, men tokeniseringsmetoden er mye enklere enn den som brukes av StreamTokenizer klasse. Metoder for StringTokenizer ikke skille mellom identifikatorer, tall og siterte strenger, og heller ikke gjenkjenne og hoppe over kommentarer.

Settet med avgrensere (tegnene som skiller tokens) kan spesifiseres enten ved opprettelsestidspunktet eller per token.

3. Bruke StringTokenizer

Det enkleste eksempelet på bruk StringTokenizer vil være å dele en String basert på spesifiserte avgrensere.

I dette raske eksemplet skal vi dele argumentet String og legge til tokens i 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; } 

Legg merke til hvordan vi bryter String i listen over tokens basert på skilletegn,‘. Så i løkken, ved hjelp av tokens.add () metode; vi legger til hvert token i ArrayList.

For eksempel hvis en bruker gir input som “Velkommen til, baeldung.com“, Denne metoden skal returnere en liste som inneholder et tre-ords fragment som“Velkommen“, “til”Og”baeldung.com“.

3.1. Java 8-tilnærming

Siden StringTokenizer redskaper Oppregning grensesnitt, kan vi bruke det med Java‘S Samlinger grensesnitt.

Hvis vi vurderer det tidligere eksemplet, kan vi hente det samme settet med tokens ved hjelp av 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 seg selv som en parameter i Collections.list () metode.

Poeng å merke seg her er at siden Oppregning er en Gjenstand type, må vi typekaste tokens til String type (dvs. avhenger av implementeringen; hvis vi bruker Liste av Heltall / flyte så må vi typegjøre med Heltall / flyte).

3.2. Varianter av StringTokenizer

StringTokenizer leveres med to overbelastede konstruktører ved siden av standardkonstruktøren: StringTokenizer (strengstr) og StringTokenizer (String str, String delim, boolean returnDelims):

StringTokenizer (strengstreng, strengavgrensning, boolsk returnDelims) tar en ekstra boolsk inngang. Hvis den boolsk verdien er ekte, deretter StringTokenizer betrakter selve skillet som et token og legger det til i det interne bassenget av tokens.

StringTokenizer (String str) er en snarvei for forrige eksempel; den kaller den andre konstruktøren internt med hardkodet skilletegn som ”\ T \ n \ r \ f” og den boolske verdien som falsk.

3.3. Token tilpasning

StringTokenizer kommer også med en overbelastet nextToken () metode som tar et strengfragment som input. Dette String fragment fungerer som et ekstra sett avgrensere; basert på hvilke tokens som omorganiseres igjen.

Hvis vi for eksempel kan passeree‘I nextToken () metode for å bryte strengen ytterligere basert på avgrenseren ‘e‘:

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

Derfor, for en gitt streng av 'Hei, baeldung.com‘Vi vil produsere følgende tokens:

H llo ba ldung.com

3.4. Token lengde

For å telle det tilgjengelige antall tokens, kan vi bruke StringTokenizer‘S størrelse metode:

int tokenLength = tokens.size ();

3.5. Lesing fra CSV-fil

La oss prøve å bruke StringTokenizer i en reell brukssak.

Det er scenarier der vi prøver å lese data fra CSV-filer og analysere dataene basert på den brukergitte avgrenseren.

Ved hjelp av StringTokenizer, vi kan lett komme dit:

public List getTokensFromFile (Sting path, String delim) {List tokens = new ArrayList (); String currLine = ""; StringTokenizer tokenizer; prøv (BufferedReader br = new BufferedReader (new InputStreamReader (Application.class.getResourceAsStream ("/" + path)))) {while ((currLine = br.readLine ())! = null) {tokenizer = new StringTokenizer (currLine, avgrense); mens (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); }}} fangst (IOException e) {e.printStackTrace (); } returner tokens; }

Her tar funksjonen to argumenter; en som CSV-filnavn (dvs. lest fra ressursene [src -> hoved -> ressurser] mappe) og den andre som skilletegn.

Basert på disse to argumentene leses CSV-dataene linje for linje, og hver linje blir tokenisert ved hjelp av StringTokenizer.

For eksempel har vi lagt inn følgende innhold i CSV:

1 | IND | India 2 | MY | Malaysia 3 | AU | Australia

Følgende tokens bør derfor genereres:

1 IND India 2 MY Malaysia 3 AU Australia

3.6. Testing

La oss nå lage en rask testsak:

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

4. Konklusjon

I denne raske opplæringen så vi på noen praktiske eksempler på bruk av kjernen Java StringTokenizer.

Som alltid er hele kildekoden tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found