PDA

Visualizza la versione completa : [Java] Dubbio su StringTokenizer


Angelo1974
28-01-2005, 16:09
Ciao a tutti; il mio problema è abbastanza semplice.
Supponiamo io abbia:

String prova = "PSW-567-32P-321";
StringTokenizer st = new StringTokenizer(prova, "PSW");

Come devo scrivere il delimitatore in StringTpkrnizer affinché prova sia spezzettata secondo PSW? Infatti se lascio così poiché il 3° carattere contiene la P sarà a sua volta spezzettato; ora vorrei che il delimitatore fosse effettivamente la stringa PSW e non i caratteri P o S o W.
Grazie a tutti

perzem
28-01-2005, 16:17
non ho capito bene, ma tu voi ottenere PWS da una parte e poi 567-32P-321.
se vuoi dividerla in quattro segmenti basta che metti -

Angelo1974
28-01-2005, 16:31
Ciao; il mio problema è il seguente; ho questo metodo:


private List getPageKeys(String key) {
List resultSet = new Vector();
resultSet.add(key);
StringTokenizer st = new StringTokenizer(key, "FWD-");
String token = null;

while (st.hasMoreTokens()) {
token = st.nextToken();
System.out.println( token );
resultSet.add( token );
}

return resultSet;
}

Come vedi vorrei che la mia stringa key fosse suddivisa in token e il delimitatore fosse FWD-.
Ora supponiamo io faccia:


List aList = getPageKeys( "FWD-001-005-001" );
tutto è ok; mi stampa:


001
005
001
E questo mi va bene. Ma se faccio:

List aList = getPageKeys( "FWD-0F1-005-001" );
Non va + bene; infatti stampa:

0
1
005
001

Questo mi fa capire che in realtà lo StringTokenizer va alla ricerca non della stringa FWD-, bensì dei caratteri F, W, D, -; quindi non appena trova uno di questi caratteri esso mi crea un token; io non vorrei ciò; vorrei che il token fosse creato dal delimitatore FWD-; cioè anche nel secondo caso voreei che si stampasse:


001
0F5
001

Ecco una cosa del genere sono sicuro sia fattibile, ma non ricordo come la risolsi a suo tempo.
Grazie

perzem
28-01-2005, 16:38
non so proprio, però potresti usare una sottostringa che parte dal terzo carattere e dividere per il trattino, oppure dividere sempre per il trattino e saltare il prino token se è sempre pwd

caimano73
28-01-2005, 17:28
Originariamente inviato da Angelo1974
Ciao a tutti; il mio problema è abbastanza semplice.
Supponiamo io abbia:

String prova = "PSW-567-32P-321";
StringTokenizer st = new StringTokenizer(prova, "PSW");

Come devo scrivere il delimitatore in StringTpkrnizer affinché prova sia spezzettata secondo PSW? Infatti se lascio così poiché il 3° carattere contiene la P sarà a sua volta spezzettato; ora vorrei che il delimitatore fosse effettivamente la stringa PSW e non i caratteri P o S o W.
Grazie a tutti

il secondo parametro del costruttore dello srtingTokenizer è una stringa che contiene i caratteri che, singolarmente, vengono utilizzati come separatori.
Ad esempio quindi new StringTokenizer("0123456789", "37")
resituirà i seguenti token:
012
456
89

Per fare quello che vorresti fare tu devi andare in cerca della sottostringa che vuoi nella stringa (e gestirti quindi la tokenizzazione tu). Per far ciò puoi usare il metodo indexOf, che riceve tra i parametri una sottostringa, e ti restituisce l'indice della prima occorrenza di questa sottostringa nella stringa, o -1 se la sottostringa non si trova.

netarrow
28-01-2005, 17:52
sennò potresti usare split con le espressioni regolari, che magari possono essere inserite anche in Tokenizer ma non sono sicuro.

:ciauz:

LeleFT
31-01-2005, 16:55
Ti pongo una domanda... non è che, semplicemente, stai sbagliando delimitatore? Se tutte le tue stringhe sono della forma


XXX-XXX-XXX-XXX...

dove X corrisponde ad un qualsiasi carattere, ma a te serve solamente spezzettarle secondo il simbolo "-", dovresti costruire uno StringTokenizer in questo modo:


StringTokenizer st = new StringTokenizer( tuaStringa, "-" );

Dai tuoi precedenti esempi mi sembra di capire che hai bisogno di suddividere la stringa in base al simbolo "-". Che tu, poi, non utilizzi il primo token non dev'essere certo un problema per te. Nemmeno se il token iniziale compare anche all'interno: un semplice if con il metodo equals() risolve il problema.

Poi, se la cosa è più complessa e a te interessa veramente avere come separatore una stringa, anzichè un carattere, credo che, oltre alle soluzioni che già ti sono state offerte, tu possa semplicemente crearti un tuo StringTokenizer, che non utilizza un solo carattere come separatore, ma una stringa.


Ciao. :ciauz:

Angelo1974
31-01-2005, 17:02
Ciao Lele; non a me serve spezzettare proprio con FWD-... il fatto che questo delimitatore appaia solo nel primo token è stata una coincidenza; il problema è che le stringhe che devo controllare potrebbero anche contonere anche FWD in ordine sparso.
Ciao

LeleFT
31-01-2005, 17:15
Immaginavo che la cosa non fosse così semplice :)
Mi sono trovato anch'io nella tua stessa identica situazione e mi sono costruito un Tokenizer personalizzato! :D


Ciao. :ciauz:

Loading