4.7 Die Klasse StringTokenizer
 
Die Klasse StringTokenizer hilft uns, eine Zeichenkette in Token zu zerlegen. Ein Token ist ein Teil eines Strings, das durch bestimmte Trennzeichen (engl. Delimiter) von anderen Token getrennt wird. Nehmen wir als Beispiel den Satz »Moderne Musik ist Instrumentespielen nach Noten« (Peter Sellers). Wählen wir Leerzeichen als Trennzeichen, lauten die einzelnen Token »Moderne«, »Musik« und so weiter. Der String-Tokenizer ist nicht an bestimmte Trenner gebunden, sie können vielmehr völlig frei gewählt werden. Nur in der Voreinstellung sind Tabulator, Leerzeichen und Zeilentrenner die Delimiter.
Hinweis In der Implementierung von StringTokenizer können nur einzelne Zeichen als Trenner verwendet werden. Es sind keine Zeichenfolgen wie »:=« denkbar.
|
Beispiel Um einen String mit Hilfe eines StringTokenizer-Objekts zu zerlegen, wird dem Konstruktor der Klasse der zu unterteilende Text als Parameter übergeben:
StringTokenizer tokenizer;
tokenizer = new StringTokenizer( "Schweigen kann die grausamste Lüge sein." );
|
Sollen andere Zeichen als die voreingestellten Trenner den Satz zerlegen, kann dem Konstruktor als zweiter String eine Liste von Trennern übergeben werden. Jedes Zeichen, das in diesem String vorkommt, fungiert als einzelnes Trennzeichen:
StringTokenizer st;
st = new StringTokenizer( "Blue=0000ff\nGreen:00ff00\n", "=:\n" );
Um den Text abzulaufen, gibt es die Methoden nextToken() und hasMoreTokens().1
Die Methode nextToken() liefert das nächste Token im String. Ist kein Token mehr vorhanden, wird eine NoSuchElementException ausgelöst. Damit wir frei von diesen Überraschungen sind, können wir mit der Methode hasMoreTokens() nachfragen, ob noch weitere Token vorliegen. Das folgende Stück Programmtext zeigt die leichte Benutzung der Klasse:
String s = "Faulheit ist der Hang zur Ruhe ohne vorhergehende Arbeit";
StringTokenizer tokenizer = new StringTokenizer( s );
while ( tokenizer.hasMoreTokens() )
System.out.println( tokenizer.nextToken() );
Neben den beiden Konstruktoren existiert noch ein dritter, der auch die Trennzeichen als eigenständige Bestandteile bei nextToken() übermittelt.
class java.util.StringTokenizer
implements Enumeration
|
|
StringTokenizer( String str, String delim, boolean returnTokens )
Ein String-Tokenizer für str, wobei jedes Zeichen in delim als Trennzeichen gilt. Ist returnTokens gleich true, so werden die Trennzeichen beim Aufzählen mit zurückgegeben. |
|
StringTokenizer( String str, String delim )
Ein String-Tokenizer für str, wobei alle Zeichen in delim als Trennzeichen gelten. Entspricht dem Aufruf von this(str, delim, false); |
|
StringTokenizer( String str )
Ein String-Tokenizer für str. Entspricht dem Aufruf von
this(str, " \t\n\r\f", false); Die Trennzeichen sind Leerzeichen, Tabulator, Zeilenende und Seitenvorschub. |
|
boolean hasMoreTokens()
Testet, ob weitere Token verfügbar sind. |
|
String nextToken()
Liefert das nächste Token vom String-Tokenizer. |
|
String nextToken( String delim )
Die Delimiter-Zeichen werden erst neu gesetzt und anschließend wird das nächste Token geholt. |
|
boolean hasMoreElements()
Ist gleich dem Aufruf von hasMoreTokens(). Existiert nur, damit das Objekt als Enumeration benutzt werden kann. |
|
Object nextElement()
Ist gleich dem Aufruf von nextToken(). Existiert nur, damit das Objekt als Enumeration benutzt werden kann. Der weniger spezifische Ergebnistyp Object macht eine Typumwandlung erforderlich. |
|
int countTokens()
Zählt die Anzahl der noch möglichen nextToken()-Methodenaufrufe. Die aktuelle Position wird dadurch nicht berührt.
nextToken() und nextElement() können eine NoSuchElementException auslösen. |
1
Die Methode hasMoreElemente() ruft direkt hasMoreTokens() auf und wurde nur implementiert, da ein StringTokenizer die Schnittstelle Enumeration implementiert.
|