Newsgroup: it.comp.java
Titolo: "stringa da splittare"

il mio problema è questo:
Ho un stringa particolare, una "whereCondition" composta da atomi di
confronto ad esempio (cod1=cod2),cod3>cod4  e valori semplici ad esempio
cod :
la stringa composta quindi potrebbe essere questa:
cod1=cod2  AND  cod3>cod4   OR    id 
ho la necessità di ottenere queste subStringhe:
-cod1=cod2;
-AND cod3>cod4;
-OR id;  
Il metodo split di String non credo sia utile xke ancke impostando una
regex con AND e OR queste ultime non comparirebbero poi nelle
sottostringhe.
Ho pensato alla classe StreamTokenizer ma nn so come funziona!
Aspetto suggerimenti ed esmpi con codice
Grazie a tutti coloro mi risponderanno   
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio
news:cbc4sk$n9e$1...@news.newsland.it...

Prova con StringBuffer.
Prima crei il tuo buffer così:
StringBuffer buffer = new StringBuffer();
poi aggiungi la stringa al buffer con buffer.append(TuaStringa);
poi crei una sottostringa con String nuovaStringa = buffer.substring(int
inizio, int fine);
e così via per tutte le parti della tua stringa...
E' solo un'idea......:-)
Fammi sapere.
Blood

>
No credo che abbia bisogno di un tokenizer.
Guarda la classe tokenizer forse fa al caso tuo. Prende un carattere e 
spezza la stringa secondo quel carattere.
Spero di esserti stato utile, ciao!


 Blood
Non conosco a priori la stringa quindi nemmeno inizio e fine , la stringa
la acquisisco  a run-time leggendola , deve essere un'operazione
applicabile su ogni string di questo tipo.
grazie 


 Grazie a tutti coloro mi risponderanno
Io farei una replace sugli operatori logici prefissandoli con un
carattere speciale (che ne so \n) e poi chiamerei lo split sulla
stessa stringa! :)

 applicabile su ogni string di questo tipo.
Se devi solo splittare la stringa prima di "AND" e "OR" puoi usare due 
split() successivi, uno sugli AND e uno sugli OR (con gli eventuali 
spazi,tab,...), e poi riaggiungere "AND " e "OR " all'inizio dei vari pezzi:
1. "aaa AND\t\n bbb\tOR ccc"
2. {"aaa", "bbb\tOR ccc"}
3. {"aaa", "AND " + "bbb\tOR ccc"}
4. {{"aaa"}, {"AND bbb", "ccc"}}
5. {{"aaa"}, {"AND bbb", "OR " + "ccc"}}
Devi però fare in modo che
"AND aaa AND bbb"
diventi dopo il primo passaggio
{"", "aaa", "bbb"}
altrimenti ti perdi un AND (stesso discorso per gli OR, per il caso in 
cui avessi AND e/o OR a fine stringa e per eventuali "OR OR" nella stringa)
Se hai esigenze più "avanzate" della semplice elaborazione di stringhe, 
considera la possibilità di farti un parser "serio" e di convertire la 
tua stringa in una struttura un po' più significativa di una collezione 
di sottostringhe (che io sappia di solito si usano degli alberi) - dai 
un'occhiata a JavaCC (java compiler compiler): è un affarino che a 
partire da una grammatica ("farcita" di codice) ti genera un parser.
Potresti facilmente (ad esepio):
- parsare e interpretare correttamente cose come "aaa AND (bbb OR ccc)"
- segnalare situazioni in cui non è stata rispettata la grammatica 
(immagino che non abbia senso per te una stringa che inizi per AND, o 
che contenga "AND OR OR")
- estendere il tuo mini-linguaggio (eventualmente in futuro) ad es. con 
NOT, LIKE, CONTAINS, ...
Non farti spaventare dall'impatto con un tool molto potente che ti 
permette di generare parser per grammatiche molto complesse (tipo per 
linguaggi come Java): scaricatelo e smanettaci per un paio d'ore prima 
di buttarlo via perchè non si capisce niente
Saluti,
	Giorgio

 e così via per tutte le parti della tua stringa...
ti ricordo che substring è lineare, quindi messo in un ciclo esplode in
complessità
ciao
Sandro
