Skip to main content

So kannst du mit dem StringTokenizer Java Strings zerlegen oder splitten

Java StringTokenizer – was ist das?
Bevor ich diese Frage kläre, schiebe ich eine zweite Frage hinterher.
Denn im Wort Tokenizer steckt das Wort Token.

Also was ist ein Token?
Hier die Definition zum Token:
Ein Token ist eine bestimmte Aneinanderreihung von Zeichen.
Man kann auch sagen, eine lexikalische Einheit.
Das kann zum Beispiel eine Zahl, wie 1782 oder ein Wort oder ein einzelner Buchstabe sein.
Der Java Compiler erkennt diese Zeichenfolge, da er die Wörter und die Grammatik von Java kennt.

Getrennt werden Token durch Leerzeichen bzw. durch das Ende der Zeichenketten.

Klingt kompliziert?
Ist es aber eigentlich nicht.

Wir werden in diesem Beitrag einen String, nach einzelne Token oder nach einzelnen Wörter zerlegen bzw. aufteilen.
Und das ganze machen wir mit einem Objekt der Klasse String Tokenizer.

Werfen wir einen Blick in die Java Klasse – String Tokenizer.

In den Java API Docs wird auch diese Klasse dokumentiert.
Ganz oben siehst du die Importanweisung, um ein Objekt der Klasse zu erstellen.

Java StringTokenizer Importanweisung

Wenn du etwas weiter nach unten scrollst, siehst du die Konstruktoren und Methoden.
Java StringTokenizer Konstruktoren

Beginnen wir bei den Konstruktoren.

Die Klasse StringTokenizer bietet dir drei verschiedene Konstruktoren an.

Der erste Konstruktor erwartet lediglich einen String.
So wie hier in diesem Beispiel:

import java.util.StringTokenizer;//Importanweisung

public class StringTokenizerDemo {

	public static void main(String[] args) {
		
		StringTokenizer strToken  = new StringTokenizer("Das ist ein Beispiel");// StringTokenizer Objekt
	}
}

Natürlich kannst du dem Tokenizer auch eine Refernzvariable übergeben, welche auf ein String-Objekt zeigt.
So wie hier.

import java.util.StringTokenizer;//Importanweisung

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer="Das ist ein Beispiel";				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer);
	}
}

Wenn du einen sehr großen Text mit Umbrüchen übergeben möchtest, kannst du die Variablendeklaration und -initialisierung auch in zwei Schritten vollziehen.
Dadurch wird es etwas übersichtlicher. So wie hier:


import java.util.StringTokenizer;//Importanweisung

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer);
	}
}

So nun hat der Konstruktor ein String übergeben bekommen.
Also was machst du jetzt damit?

Die Klasse StringTokenizer bietet eine Methode, namens nextToken() an.
Und diese Methode kannst du am Objekt aufrufen.

Java String Tokenizer nextToken

Die Methode returnt dir einen String, welchen du in einer neuen Referenzvariable speichern musst.
Und diesen neuen Textwert kannst du dir dann auf der Konsole anzeigen lassen.

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer);
		String textRueckgabe = strToken.nextToken();//Rückgabewert wird gespeichert
		
		System.out.println(textRueckgabe);//gespeicherter Wert wird auf der Konsole ausgegeben
	}
}

Wenn du so wie ich, nur die Bildschirmausgabe benötigst – kannst du die Methodenrückgabe auch gleich in eine system.out.println()-Anweisung einbetten.

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer);
		
		System.out.println(strToken.nextToken());//Rückgabe - Das
		System.out.println(strToken.nextToken());//Rückgabe - ist
		System.out.println(strToken.nextToken());//Rückgabe - mein
	}
}

Wie auch immer.
Klicke auf „RUN“ und die ersten drei Token erscheinen auf der Konsole.

Okay-schauen wir uns den nächsten Konstruktor der StringTokenizer Klasse an.

Der zweite Konstruktor der Klasse String Tokenizer erwartet noch einen String.

Jetzt kannst du im zweiten String festlegen, welche Trennzeichen beachtet werden sollen.
Der erste Konstruktor trennt nach Leerzeichen.
Und diesen Konstruktor kannst du zum Beispiel nach Satzpunkten trennen lassen.

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer,".");//Jetzt wird nur noch am Punkt getrennt
		
		System.out.println(strToken.nextToken());//Rückgabe - Das ist mein Beispieltext für den StringTokenizer
		System.out.println(strToken.nextToken());//Rückgabe - Dieser Text soll zerlegt werden
		System.out.println(strToken.nextToken());//Rückgabe - Und zwar Token für Token
	}
}

Klicke wieder auf „RUN“ und jetzt sollte der erste Satz auf der Konsole ausgegeben werden.

Aber du kannst diesem Konstruktor noch viel mehr Trennungsregeln mitgeben.
Füge doch zum Satzpunkt noch ein „z“ ein.

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer,".z");//Jetzt wird am Punkt und am z getrennt
		
		System.out.println(strToken.nextToken());//Rückgabe - Das ist mein Beispieltext für den StringTokeni
		System.out.println(strToken.nextToken());//Rückgabe - er
		System.out.println(strToken.nextToken());//Rückgabe - Dieser Text soll
	}
}

Jetzt trennt der Tokenizer den ersten Satz schon beim ersten Auftreten des Buchstaben „z“.
Wenn du die Methode nextToken() nochmals aufrufst, zerlegt der Tokenizer den übrigen Text weiter.
Und zwar so weit, bis das nächste „z“ oder der nächste Satzpunkt erscheint.
Klicke wieder auf „RUN“ und schau dir die Ausgabe an.

Blöd ist nur, dass der Tokenizer die Trennungszeichen verschluckt.

  • Denn der erste Token lautet: Das ist mein Beispieltext für den StringTokeni
  • Und der zweite lautet: er
  • Der dritte lautet dann: Dieser Text soll

Du siehst – der Satzpunkt und das „z“ wurden verschluckt.
Und um dies zu regeln, benötigst du den dritten Konstruktor.

Beim dritten Konstruktoraufruf kannst du dem Tokenizer sagen, ob die Trennungszeichen mit ausgegeben werden sollen.

Beim Aufruf des dritten Konstruktors, übergibst du einen weiteren Parameter.
Dieser ist ein boolean.
Du übergibst entweder true oder false, als Argument.

Im Falle von true werden dann die Trennzeichen auf der Konsole mit ausgegeben.
So wie hier:

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer,".z",true);//mit Trennungszeichen
		
		System.out.println(strToken.nextToken());//Rückgabe - Das ist mein Beispieltext für den StringTokeni
		System.out.println(strToken.nextToken());//Rückgabe - z
		System.out.println(strToken.nextToken());//Rückgabe - er
	}
}

Und im Falle von false, werden die Trennungszeichen verschluckt.
So wie hier:

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer,".z",false);//ohne Trennugszeichen
		
		System.out.println(strToken.nextToken());//Rückgabe - Das ist mein Beispieltext für den StringTokeni
		System.out.println(strToken.nextToken());//Rückgabe - er
		System.out.println(strToken.nextToken());//Rückgabe - Dieser Text soll
	}
}

Die Methoden des Java StringTokenizer.

Eine Methode hast du bereits benutzt.
Die Methode nextToken() gibt beim Aufruf immer den nächsten Token zurück.
Sie returnt einen String. Und deshalb musst du den Rückgabewert entweder speichern oder in eine Konsolenausgabe implementieren.

Java StringTokenizer NextToken überladen

Die Methode nextToken() ist überladen.
Denn du kannst ihr beim Aufruf auch ein Trennzeichen als String übergeben.
Und dann werden die Token, in Abhängigkeit vom Trennzeichen zurück gegeben.

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer);
		
		System.out.println(strToken.nextToken("ü"));//Rückgabe - Das ist mein Beispieltext f
		System.out.println(strToken.nextToken("."));//Rückgabe - ür den StringTokenizer
		System.out.println(strToken.nextToken("s"));//Rückgabe - .Die
	}
}

Eine weitere Methode ist countToken().
Diese Methode gibt beim Aufruf die mögliche Anzahl der nextToken()-Aufrufe zurück.
Sie returnt einen Integer-Wert, welchen du entweder speichern oder in eine Konsolenausgabe packen kannst.

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer);
		System.out.println(strToken.countTokens());//Rückgabe - 25 -die Anzahl der möglichen Aufrufe
	}
}

Die Methode countToken() kann dir aber auch die Anzahl der Sätze liefern.
So wie hier:

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer,".");//Trennungsregel Satzpunkt
		System.out.println(strToken.countTokens());//Rückgabe - 4 -die Anzahl der Sätze
		
	}
}

Eine weitere Methode ist die Methode hasMoreToken().

Java StringTokenizer hasMoreToken

Die Methode hasMoreToken() returnt einen boolean.
Also entweder wahr oder falsch. Beziehungsweise true oder false.
Sie prüft, ob der Text noch weitere Token enthält.
Bei weiteren Token gibt sie den Wert true aus.
Ansonsten returnt sie den Wert false.
Hier das Beispiel dazu:

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer,".");//Trennungsregel Satzpunkt
		
		System.out.println(strToken.nextToken());//Rückgabe - Das ist mein Beispieltext für den StringTokenizer
		System.out.println(strToken.hasMoreTokens());//Gibt es weitere Token? - Rückgabe= true
		
		System.out.println(strToken.nextToken());//Rückgabe - Dieser Text soll zerlegt werden
		System.out.println(strToken.hasMoreTokens());//Gibt es weitere Token? - Rückgabe = true
		
		System.out.println(strToken.nextToken());//Rückgabe - Und zwar Token für Token
		System.out.println(strToken.hasMoreTokens());//Gibt es weitere Token? - Rückgabe=true
		
		System.out.println(strToken.nextToken());//Rückgabe - Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen
		System.out.println(strToken.hasMoreTokens());//Gibt es weitere Token? - Rückgabe = false
	}
}

So kannst du einen Java String mit dem StringTokenizer und einer Schleife zerlegen bzw. aufsplitten.

Jetzt brauchst du sämtliche Methoden.
Und zwar soll eine Schleife den Text Stück für Stück zurückgeben.

Welcher Schleifentyp ist dafür am besten geeignet?
Die Anzahl der Token ist erst einmal unbekannt.
Und somit ist die Anzahl der Schleifendurchläufe ebenfalls unbekannt.
Es ist deshalb sinnvoll, eine while Schleife einzusetzen.

So kannst du einen String mit dem StringTokenizer und einer while Schleife zerlegen.

Schau dir die Methoden des String Tokenizer nochmals an.
Diese Klasse gibt dir die Methode hasMoreToken() an die Hand.
Die Methode prüft, ob weitere Token existieren.

Es bietet sich also an, diese Methodenrückgabe als Schleifenbedingung einzusetzen.
hasMoreToken() == true

Und hier der Java Code zu diesem Beispiel.

import java.util.StringTokenizer;

public class StringTokenizerDemo {

	public static void main(String[] args) {
		String textFuerTokenizer;
		textFuerTokenizer= "Das ist mein Beispieltext für den StringTokenizer."
				+ "Dieser Text soll zerlegt werden."
				+ "Und zwar Token für Token."
				+ "Eine Schleife soll dann die einzelnen Token auf der Konsole anzeigen";
				
		
		StringTokenizer strToken  = new StringTokenizer(textFuerTokenizer," .");//Trennungsregel Leerzeichen und Punkt
		
		while (strToken.hasMoreTokens()==true){
			System.out.println(strToken.nextToken());//Ausgabe Token für Token bzw. Wort für Wort
		}
	}
}

Als Trennungsregel habe ich den Satzpunkt und das Leerzeichen verwendet.
Somit wurde dieser Java String Wort für Wort zerlegt.

Analog dazu kannst du aber auch nur den Punkt, als Trennungszeichen verwenden.
Dann wird die Schleife den String – Satz für Satz zerlegen.

Zusammenfassung:

  • Java Strings lassen sich mit dem Java StringTokenizer teilen.
  • Die Java Klasse String Tokenizer bietet dir dafür drei verschiedene Konstruktoren und ein paar Methoden an.
  • In Zusammensetzung mit einer while Schleife kannst du einen String in seine Einzelteile zerlegen.

Ähnliche Beiträge

Eine Java Konsoleneingabe machst du über den Scanner

Es wird Zeit für die erste Java Konsoleneingabe. Und diese Eingaben machst du über den Java Scanner. Was ist das? Der Scanner ist eine vorgefertigte Java Klasse, welche Java mit seiner API anbietet. Das heißt du musst nichts selbst erschaffen. Du musst nur wissen, wie du darauf zugreifst. Erst einmal musst du einen Scanner anlegen. […]

Java Strings landen im String Constant Pool

Java-Strings-Pool

Du kennst das. Es ist abends. Du sitzt gemütlich vor dem Fernseher. Das Smartphone bimmelt. Kein Anruf. Nein – Eine Nachricht. Du liest die Nachricht sofort und antwortest darauf. Minuten später bekommst du die nächste Nachricht. Und auch auf diese antwortest du. Im Laufe des Abends entsteht daraus eine nette kleine Konversation. Und eh du […]

Zwei smarte Möglichkeiten eine Java Zufallszahl zu erzeugen

Java Zufallszahl

Java Zufallszahl – Wieso? In der Java Programmierung benötigst du immer wieder einmal Zufallszahlen. Du möchtest deine Software mit Daten testen und dir keine Zahlen ausdenken. Du benötigst Stichproben, welche ein reales Verhalten simulieren. Du hast ein Spiel entworfen und die Akteure sollen mit zufälligen aber unterschiedlichen Größen, Rüstungsleveln usw. auftreten. Die Einsatzmöglichkeiten für Zufallszahlen […]

Das Java Leben ist einfacher mit For-Schleife

Java For Schleife Aufbau

In einem anderen Artikeln habe ich bereits über Schleifen in Java gesprochen. In diesem Artikel möchte ich dir eine ganz besondere Schleife vorstellen. Warum ist diese so toll? Sie hat einen integrierten Schleifenzähler. Die Schleife zählt also bei jedem Durchlauf automatisch mit. Aber dazu gleich mehr…. Lass uns einmal so eine For Schleife anlegen.

Java Übung 25 – Simuliere eine Gelddruckmaschine

Java Übung Gelddruckmaschine

In dieser Java Übung geht es um Schleifen. Und zwar möchte ich, dass du eine virtuelle Geldruckmaschine erstellst. Was meine ich damit? Du gibst in der Konsole einen x-beliebigen Betrag ein und das Programm gibt dir virtuelle Geldscheine zurück. Ein Beispiel: Du gibst die Zahl 400 ein. Dann liefert dir das Programm 2 x 200 […]

So kannst du Instanzen in Java Klassen zählen

Wie kannst du die Instanzen der Java Klassen zählen? Ganz einfach. Am besten ist es, wir bleiben beim Einführungsbeispiel zu den Java Klassen. Und ich wähle die Klasse „Monster“. Um es einfach zu halten, soll auch der Programmstart durch die Klasse erfolgen. Die Klasse bietet somit eine main-Methode an.

So kannst du Java Konstruktoren anlegen und überladen

Java Konstruktoren

Der Name sagt es schon. Java Konstruktoren konstruieren oder bauen Java Objekte. Und diese Objekte baut der Konstruktor auf Vorlage der entsprechenden Java Klasse. In diesem Beitrag zeige ich dir natürlich verschiedene Ansätze wie du den Konstruktor einsetzt. Ich zeige dir dies Schritt für Schritt. Dabei zeige ich dir auch verschiedene Dinge, welche nicht funktionieren. […]

Java Übung 17: Char-Zeichen mit For-Schleife

Java Übung Char Zeichen For Schleife

In dieser Java Übung werden wir uns die Zeichen des Character Datentypen näher anschauen. Die einzelnen Zeichen sollen auf der Konsole ausgegeben werden. Und wie? Das ganze sollst du mit einer For Schleife machen. Erstelle deshalb eine Klasse „CharZeichen“. In dieser Klasse implementierst du dann eine Klassenmethode, namens „gibZeichen“. Und im Methodenrumpf durchläuft eine For-Schleife […]

So kannst du deine Java Methoden ausführen

Java Methoden ausführen

Du hast die ersten Java Methoden erstellt. Doch wie greifst du jetzt auf diese zu? Wie kannst du diese Methoden in einer anderen Klassen aufrufen? Welcher Unterschied, hinsichtlich des Methodenaufrufes, besteht eigentlich zwischen deinen Java Methoden? Diese Fragen möchte ich gern in diesem Beitrag beantworten. Gehen wir dazu in den Garten und schauen uns Blumen […]

So nutzt du das Java Keyword public

Java Keyword public

Java Programme bestehen aus Java Klassen. Und der Zugriff auf eine Java Klasse sollte nach außen immer gewährleistet sein. Was bedeutet das? Du solltest in jeder Klasse die Möglichkeit haben, ein Objekt einer anderen Klasse anzulegen. Gerade durch diese Möglichkeit macht doch das ganze Klassenkonstrukt erst Sinn.