La Classe StringTokenizer in Java
- La classe
StringTokenizer
è utilizzata per suddividere una stringa in token discreti basati su delimitatori specificati. - I token possono essere estratti in sequenza utilizzando i metodi
nextToken()
ehasMoreTokens()
. - I delimitatori possono essere personalizzati, e i token possono essere restituiti come stringhe o oggetti.
- La classe implementa l'interfaccia
Enumeration
, permettendo l'iterazione sui token. - La classe è utile per l'analisi di stringhe formattate, come coppie chiave-valore.
StringTokenizer
L'elaborazione del testo spesso consiste nell'analizzare una stringa di input formattata.
L'analisi è la divisione del testo in un insieme di parti discrete, o token, che in una certa sequenza possono trasmettere un significato semantico.
La classe StringTokenizer
fornisce il primo passo in questo processo di analisi, spesso chiamato lexer (analizzatore lessicale) o scanner. StringTokenizer
implementa l'interfaccia Enumeration
. Pertanto, data una stringa di input, possiamo enumerare i singoli token contenuti in essa utilizzando StringTokenizer
.
Per utilizzare StringTokenizer
, specifichiamo una stringa di input e una stringa che contiene i delimitatori. I delimitatori sono caratteri che separano i token. Ogni carattere nella stringa dei delimitatori è considerato un delimitatore valido—per esempio, ",;:"
imposta i delimitatori a virgola, punto e virgola, e due punti. L'insieme predefinito di delimitatori consiste nei caratteri di spaziatura: spazio, tabulazione, avanzamento di pagina, nuova riga, e ritorno carrello.
I costruttori di StringTokenizer
sono mostrati qui:
StringTokenizer(String str)
StringTokenizer(String str, String delimitatori)
StringTokenizer(String str, String delimitatori, boolean delimComeToken)
In tutte le versioni, str
è la stringa che sarà tokenizzata. Nella prima versione, vengono utilizzati i delimitatori predefiniti. Nella seconda e terza versione, delimitatori
è una stringa che specifica i delimitatori. Nella terza versione, se delimComeToken
è true, allora i delimitatori vengono anche restituiti come token quando la stringa viene analizzata. Altrimenti, i delimitatori non vengono restituiti. I delimitatori non vengono restituiti come token dalle prime due forme.
Una volta creato un oggetto StringTokenizer
, il metodo nextToken()
viene utilizzato per estrarre token consecutivi. Il metodo hasMoreTokens()
restituisce true
mentre ci sono più token da estrarre. Poiché StringTokenizer
implementa Enumeration
, anche i metodi hasMoreElements()
e nextElement()
sono implementati, e agiscono allo stesso modo di hasMoreTokens()
e nextToken()
, rispettivamente. I metodi di StringTokenizer
sono mostrati nella tabella seguente:
Metodo | Descrizione |
---|---|
int countTokens() |
Utilizzando l'insieme corrente di delimitatori, il metodo determina il numero di token rimasti da analizzare e restituisce il risultato. |
boolean hasMoreElements() |
Restituisce true se uno o più token rimangono nella stringa e restituisce false se non ce ne sono. |
boolean hasMoreTokens() |
Restituisce true se uno o più token rimangono nella stringa e restituisce false se non ce ne sono. |
Object nextElement() |
Restituisce il prossimo token come un Object . |
String nextToken() |
Restituisce il prossimo token come una String . |
String nextToken(String delimitatori) |
Restituisce il prossimo token come una String e imposta la stringa dei delimitatori a quella specificata da delimitatori. |
Ecco un esempio che crea un StringTokenizer
per analizzare testo contenente coppie del tipo "chiave=valore"
. Insiemi consecutivi di coppie "chiave=valore"
sono separati da un punto e virgola.
// Demo della classe StringTokenizer
import java.util.StringTokenizer;
class DemoST {
// String di input da analizzare
static String dati_ingresso = """
titolo=Divina Commedia;
autore=Dante Alighieri;
anno=1300;
lingua=Italiano;
""";
// Fine della stringa di input
public static void main(String[] args) {
StringTokenizer st =
new StringTokenizer(dati_ingresso, "=;");
while(st.hasMoreTokens()) {
String chiave = st.nextToken();
String valore = st.nextToken();
System.out.println(chiave + "\t" + valore);
}
}
}
L'output di questo programma è mostrato qui:
titolo Divina Commedia
autore Dante Alighieri
anno 1300
lingua Italiano
Alternativa Moderna: Le Espressioni Regolari
Sebbene la classe StringTokenizer
sia utile per compiti semplici di tokenizzazione, è importante notare che le espressioni regolari forniscono un modo più potente e flessibile per analizzare stringhe complesse. Le espressioni regolari possono gestire casi più complessi e sono generalmente preferite per l'analisi del testo in Java.
Studieremo le espressioni regolari in dettaglio nelle prossime lezioni, dove esploreremo come utilizzarle per compiti di analisi del testo più avanzati.