Home / Programmazione / Java / Java StringTokenizer
Mattepuffo

Java StringTokenizer

Java StringTokenizer

La così detta "tokenization" è un processo attraverso il quale spezziamo la stringa in più parti, dove ogni parte è appunto chiamata token.

Java ci mette a disposizione la classe StringTokenizer per spezzare la stringa in token, ed è molto facile usarla.

Se state obbiettando che già possiamo String.split, vi dico che in parte avete ragione, ma ci stanno delle differenze in termini di flessibilità e performance.

Qui potete un articolo che mostra alcune differenze.

A questo punto andiamo a vedere un esempio con StringTokenizer:

public class StringTokenizerTest {

    public static void main(String[] args) {

        StringTokenizer st1 = new StringTokenizer("Ciao!Come stai?E' tanto che non ci vediamo!");
        for (int i = 1; st1.hasMoreTokens(); i++) {
            System.out.println("Token " + i + ":" + st1.nextToken());
        }

    }
}

Questo è l'output prodotto:

Token 1:Ciao!Come
Token 2:stai?E'
Token 3:tanto
Token 4:che
Token 5:non
Token 6:ci
Token 7:vediamo!

In sostanza la stringa viene spezzata ad ogni spazio.

Possiamo, ovviamente, impostare un altro delimitatore passandolo al costruttore:

public class StringTokenizerTest {

    public static void main(String[] args) {

        StringTokenizer st1 = new StringTokenizer("Ciao!Come stai?E' tanto che non ci vediamo!", "?");
        for (int i = 1; st1.hasMoreTokens(); i++) {
            System.out.println("Token " + i + ":" + st1.nextToken());
        }

    }
}

Questo il risultato:

Token 1:Ciao!Come stai
Token 2:E' tanto che non ci vediamo!

Possiamo anche decidere di "eliminare" il delimitatore usando il costruttore a tre argomenti:

public class StringTokenizerTest {

    public static void main(String[] args) {

        StringTokenizer st1 = new StringTokenizer("Ciao!Come stai?E' tanto che non ci vediamo!", "?", false);
        for (int i = 1; st1.hasMoreTokens(); i++) {
            System.out.println("Token " + i + ":" + st1.nextToken());
        }

    }
}

Stesso risultato senza il ?:

Token 1:Ciao!Come stai
Token 2:E' tanto che non ci vediamo!

StringTokenizer tende ad essere più perfomante di String.split, ma anche meno flessibile.

Tendenzialmente, da quanto ho capito, il suo è consigliato solo se la stringa da spezzare è molto lunga, e deve essere spezzata in maniera "semplice" (niente espressioni regolari o giù di li).

Enjoy!