Gyakorlati alapok
A StringTokenizer osztály
Az osztály fogalmát a későbbiekben tisztázzuk a Gyakorlati alapok III. (Az osztályok) című fejezetben. Ám az alábbiak már sejtetik: az osztály valamilyen szempont szerint összetartozó adatok és metódusok már önállóan is működőképes egysége. Ennek a rövid ismertetőnek inkább a String, StringBuilder és StringBuffer fejezetek mellett lett volna helye, ám azok egészen a kezdő szinten kerültek publikálásra és a jelen fejezet tartalma azért már ennél nehezebb.

A token bonyolult fogalom az informatikában. A szó eredeti jelentése jel, jelzés, vezérjel és még ezernyi más. Értelmezésem szerint a token egy, valamilyen módon informatikailag önmagában is értelmezhető, azaz információt hordozó jel.
Az informatikai szöveg nemcsak szavakat és nyelvtani jelzéseket, hanem egyéb formázókaraktereket-karakterkombinációkat is tartalmaz. Közülük sok elnevezése és funkciója legtöbbször még a gépírásig nyúlik vissza, bár a Java-nyelvbe is beépült, amely egyébként határoló karaktereknek hívja (delimiter characters). A legfontosabb határoló karakterek a következők:
-
szóköz (white space),
-
\t - tabulátor (tab character),
-
\n - új sor (newline character),
-
\r - kocsi vissza (carriage-return character),
-
\f - új lap (form-feed character).
A határoló karakterek eredeti és az informatikában megváltozott funkciója most nem lényeges.
A StringTokenizer osztály képes ezen formázó "karaktertöltelékek" közül -amelynek jelenléte nem probléma, hiszen részben erre alapul az informatikai szöveg formázhatósága-, a számunkra hasznos és tovább már nem bontható alapkarakter-sorozatokat (token szavakat) kiemelni és egymás alá rendezni. A megfelelő implementációhoz az osztályban elérhető további 2 metódust használunk fel:
-
boolean típusú hasMoreTokens() - true értéket ad vissza, ha az aktuális token- pozíció után van még legalább 1 String,
-
String típusú nextToken() - visszaadja a következő String értéket.
A 2 metódust egy elöltesztelő ciklussal kombinálva...
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
...a tokenbontás pontosan a String objektum végéig tart (anélkül, hogy méretét előzetesen meg kéne adnunk, hiszen azt sok esetben nem tudhatjuk előre).

import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) {
String str = "Lenni vagy nem lenni, ez itt a kérdés.";
StringTokenizer st = new StringTokenizer(str);
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
}
}
Végeredmény (például):
Lenni
vagy
nem
lenni,
ez
itt
a
kérdés.


