PDA

View Full Version : [JAVA]Uso della classe StringTokenizer


motogpdesmo16
18-01-2006, 19:25
E' possibile stabilire i criteri con cui effettuare la suddivisione in token??
Di default il tokenizer separa la stringa che viene passata, ad ogni spazio. Vedendo nelle api però c'è questo esempio:
StringTokenizer(String str, String delim)
dove delim dovrebbe essere il "delimitatore" per la separazione.
Ho provato a valorizzarlo con una lettera, ad esempio "a", ma non riesco a farlo funzionare.
Questa funzione mi serve per cercare tutte le parole presenti in un testo, ponendo quindi attenzione ai segni di punteggiatura e, ovviamente, agli spazi tra una parola e l'altra. in questo caso, quali caratteri dovrei mettere come delimitatore??

grazie.

VegetaSSJ5
18-01-2006, 20:03
guardando questa pagina

http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html

c'è questa definizione
StringTokenizer

public StringTokenizer(String str,
String delim)

Constructs a string tokenizer for the specified string. The characters in the delim argument are the delimiters for separating tokens. Delimiter characters themselves will not be treated as tokens.

Parameters:
str - a string to be parsed.
delim - the delimiters.
e dice che il parametro delim è la stringa dei delimitatori. per cui se devi eliminare la punteggiatura secondo me dovresti passare al metodo StringTokenizer la stringa

string delim = ".,:;?!";

e tutti gli altri delimitatori che ti vengono in mente, prova un po'...

w4nderlust
18-01-2006, 20:49
ahahaha geniale sei un mio compagno di corso ^_^ dannato progetto di fanizzi :P

cmq stringtokenizer: la stringa in input è la tringa da "tokenizzare" (dividere in parole) delim invece è un array di caratteri (sotto forma di stringa) di tutti i delimitatori. Anchio l'ho usato nel caso di studio: ho screato una stringa " .," con tutti i possibili separatori come campo d'istanza della classe e poi gliel'ho fornita come secondo argometno esplicito quando sono arrivato al tokenizer. Se non fornisci la stringa dei delimiters imposta come delimitatore delle parole lo spazio bianco (spesso e volentieri basta questo) ;)

franksisca
19-01-2006, 09:05
ragazzi, guardatre che c'è anche un altro costrutto, che è utile a volte:

StringTokenizer st=new StringTokenizer(input,delim,true);


il true serve per memorizzare i token delimitatori.
è utile se fate il parser di un'espressione matematica, dove usate come delimitatori gli operatori, e poi li memorizzate in apposita struttura dati.
Spero di avervi aiutato ad allargare le vostre conoscenze, e quindi anche le mie;)

pinok
19-01-2006, 10:37
Se non ricordo male, se il testo è su più righe vi occorre mettere come delimitatori anche \n\r per avere quindi, ad es.: ".,\n\r"

motogpdesmo16
19-01-2006, 11:49
ahahaha geniale sei un mio compagno di corso ^_^ dannato progetto di fanizzi :P

cmq stringtokenizer: la stringa in input è la tringa da "tokenizzare" (dividere in parole) delim invece è un array di caratteri (sotto forma di stringa) di tutti i delimitatori. Anchio l'ho usato nel caso di studio: ho screato una stringa " .," con tutti i possibili separatori come campo d'istanza della classe e poi gliel'ho fornita come secondo argometno esplicito quando sono arrivato al tokenizer. Se non fornisci la stringa dei delimiters imposta come delimitatore delle parole lo spazio bianco (spesso e volentieri basta questo) ;)
evviva il caso di studio del buon fanizzi.
Ho creato una stringa con tutti i delimitatori (tutti i caratteri che non sono parole) e la passo come parametro e adesso funziona.
Come diceva però pinok bisognerebbe aggiungere anche "\r\n\t\s"...