Kurzanleitung zum Java StringTokenizer

1. Übersicht

In diesem kurzen Artikel werden wir eine grundlegende Klasse in Java untersuchen - den StringTokenizer .

2. StringTokenizer

Die StringTokenizer- Klasse hilft uns, Strings in mehrere Token aufzuteilen .

StreamTokenizer bietet ähnliche Funktionen, aber die Tokenisierungsmethode ist viel einfacher als die von der StreamTokenizer- Klasse verwendete. Die Methoden von StringTokenizer unterscheiden weder zwischen Bezeichnern, Zahlen und Zeichenfolgen in Anführungszeichen noch erkennen und überspringen sie Kommentare.

Der Satz von Trennzeichen (die Zeichen, die Token trennen) kann entweder zum Zeitpunkt der Erstellung oder auf Token-Basis angegeben werden.

3. Verwenden des StringTokenizers

Das einfachste Beispiel für die Verwendung StringTokenizer wird ein aufzuspalten String basierend auf festgelegten Trennzeichen.

In diesem kurzen Beispiel teilen wir das Argument String auf und fügen die Token einer Liste hinzu :

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

Beachten Sie, wie wir den String in die Liste der Token aufteilen, die auf dem Trennzeichen ' , ' basieren . Dann in der Schleife mit der Methode tokens.add () ; Wir fügen jedes Token der ArrayList hinzu.

Wenn ein Benutzer beispielsweise als " Willkommen bei baeldung.com " eingibt , sollte diese Methode eine Liste zurückgeben, die ein Drei-Wort-Fragment als " Willkommen ", " bei " und " baeldung.com " enthält.

3.1. Java 8-Ansatz

Da StringTokenizer implementiert Enumeration - Schnittstelle, können wir es mit J verwenden ava ‚s Sammlungen Schnittstelle.

Wenn wir das frühere Beispiel betrachten, können wir denselben Satz von Token mithilfe der Collections.list () -Methode und der Stream- API abrufen :

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

Hier übergeben wir den StringTokenizer selbst als Parameter in der Collections.list () -Methode.

Punkt zu beachten ist hier, dass, da die Zählung eine ist Object - Typ, müssen wir die Token Typ Guss String - Typ (dh abhängig von der Implementierung, wenn wir verwenden Liste von Integer / Float dann müssen wir geben Guss mit Integer / Float ).

3.2. Varianten von StringTokenizer

StringTokenizer enthält neben dem Standardkonstruktor zwei überladene Konstruktoren: StringTokenizer (String str) und StringTokenizer (String str, String delim, boolean returnDelims):

StringTokenizer (String str, String delim, boolean returnDelims) verwendet eine zusätzliche boolesche Eingabe. Wenn der boolesche Wert true ist , betrachtet StringTokenizer das Trennzeichen selbst als Token und fügt es seinem internen Token-Pool hinzu.

StringTokenizer (String str) ist eine Verknüpfung zum vorherigen Beispiel. Der andere Konstruktor mit dem fest codierten Trennzeichen wird intern als "\ t \ n \ r \ f" und der boolesche Wert als " false " aufgerufen .

3.3. Token-Anpassung

StringTokenizer enthält auch eine überladene nextToken () -Methode, die ein Zeichenfolgenfragment als Eingabe verwendet. Dieses String- Fragment fungiert als zusätzlicher Satz von Trennzeichen. basierend darauf, welche Token wieder neu organisiert werden.

Wenn wir beispielsweise ' e ' in der nextToken () -Methode übergeben können, um die Zeichenfolge basierend auf dem Trennzeichen ' e ' weiter zu unterbrechen :

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

Daher werden wir für eine bestimmte Zeichenfolge von ' Hallo, baeldung.com ' folgende Token erstellen:

H llo ba ldung.com

3.4. Token Länge

Um die verfügbaren Zahlen von Token zu zählen, können wir verwenden StringTokenizer ‚s Größe Methode:

int tokenLength = tokens.size();

3.5. Lesen aus der CSV-Datei

Versuchen wir nun, StringTokenizer in einem realen Anwendungsfall zu verwenden.

Es gibt Szenarien, in denen wir versuchen, Daten aus CSV-Dateien zu lesen und die Daten basierend auf dem vom Benutzer angegebenen Trennzeichen zu analysieren.

Mit StringTokenizer können wir leicht dorthin gelangen:

public List getTokensFromFile( String path , String delim ) { List tokens = new ArrayList(); String currLine = ""; StringTokenizer tokenizer; try (BufferedReader br = new BufferedReader( new InputStreamReader(Application.class.getResourceAsStream( "/" + path )))) { while (( currLine = br.readLine()) != null ) { tokenizer = new StringTokenizer( currLine , delim ); while (tokenizer.hasMoreElements()) { tokens.add(tokenizer.nextToken()); } } } catch (IOException e) { e.printStackTrace(); } return tokens; }

Hier nimmt die Funktion zwei Argumente an; eine als CSV-Dateiname (dh aus dem Ordner resources [src -> main -> resources] lesen ) und die andere als Trennzeichen.

Basierend auf diesen beiden Argumenten werden die CSV-Daten Zeile für Zeile gelesen und jede Zeile wird mit StringTokenizer tokenisiert .

Zum Beispiel haben wir folgenden Inhalt in die CSV eingefügt:

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

Daher sollten folgende Token generiert werden:

1 IND India 2 MY Malaysia 3 AU Australia

3.6. Testen

Lassen Sie uns nun einen kurzen Testfall erstellen:

public class TokenizerTest { private MyTokenizer myTokenizer = new MyTokenizer(); private List expectedTokensForString = Arrays.asList( "Welcome" , "to" , "baeldung.com" ); private List expectedTokensForFile = Arrays.asList( "1" , "IND" , "India" , "2" , "MY" , "Malaysia" , "3", "AU" , "Australia" ); @Test public void givenString_thenGetListOfString() { String str = "Welcome,to,baeldung.com"; List actualTokens = myTokenizer.getTokens( str ); assertEquals( expectedTokensForString, actualTokens ); } @Test public void givenFile_thenGetListOfString() List actualTokens = myTokenizer.getTokensFromFile( "data.csv", " }

4. Fazit

In diesem kurzen Tutorial haben wir uns einige praktische Beispiele für die Verwendung des Java StringTokenizer- Kerns angesehen .

Wie immer ist der vollständige Quellcode auf GitHub verfügbar.