|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2009
Messaggi: 13
|
[Java] Espressioni Regolari
Ciao a tutti! Ancora una volta ho bisogno di un vostro aiuto!!
![]() Il mio problema è questo : ho un file di testo contenente una stringa per riga; vorrei poter fare in modo che TUTTE queste stringhe terminino con " ;" (spazio seguito dal punto e virgola senza le virgolette)... quindi se ho qualcosa del tipo : select * from users deve diventare select * from users ; Leggendo un po' su Internet mi pare di aver capito che potrei usare delle espressioni regolari, ma sinceramente documentandomi un po' c'ho capito veramente poco. P.S. prima del ; finale deve essere presente un solo spazio, quindi se la stringa termina con uno spazio bisogna aggiungere solo il ; alla fine Grazie Mille ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Le espressioni regolari sono l'anticamera dell'alcolismo, se non devi cercare pattern complessi è meglio evitarle.
Se ho la stringa: String line = "select * from users" e dico: line = line + " ;" la stringa diventa: "select * from users ;" Se la stringa termina con uno spazio aggiungi solo ";" sarebbe: Codice:
if(line.endsWith(" ")) { line += ";"; } else { line += " ;"; } Viene da chiedersi se la linea possa terminare con più di uno spazio, tipo: "select * from " Qui l'if non va più bene. Opzione 1, "trim". Il metodo trim degli String elimina gli spazi all'inizio e alla fine della stringa: line = line.trim() + " ;" garantisce che la linea termini sempre e solo con uno spazio e un punto e virgola, tagliano eventuali spazi iniziali. Se vuoi preservare gli spazi iniziali passi al "fai da te": while(line.endsWith(" ")) line = line.substring(0, line.length() - 1); line += " ;"; Questo funziona come il precedente ma lascia eventuali spazi iniziali. Insomma, c'è di che sbizzarrirsi.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
Ciao,
Forse ho letto di fretta e mi sfugge qualche dettaglio specifico, ma una: Codice:
if(!line.endsWith(";")) line+=";"; Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
In particolare non aggiungerebbe il carattere di spazio prima del ";", come invece richiesto dall'utente.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Nov 2009
Messaggi: 13
|
Innanzitutto grazie mille per le risposte, siete gentilissimi!!
Ho risolto, almeno spero, quasi tutti i problemi con il vostro aiuto solo che ne ho ancora uno ![]() Se ho una stringa del tipo : Select * from utenti; in base a quanto scritto mi verrebbe aggiunto il " ;" alla fine ottenendo quindi Select * from utenti; ; Quello che vorrei ottenere,invece, è Select * from utenti ; quindi praticamente dire che ogni qualvolta ho una stringa che termina con un qualsiasi carattere subito seguito dal ; deve aggiungermi uno spazio prima del ; ...E' possibile fare questo?! (Ditemi di si vi prego!!! ![]() Ancora grazie mille |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Posta il codice interessato così si aggiusta quello, altrimenti ti continuano ad arrivare nuove soluzioni.
Ad ogni modo se la tua stringa è s, in questo caso specifico Codice:
s = s.trim(); if(s.endWith(";")) s = s.substring(0, s.length()-2) + " ;"; ![]() Ultima modifica di ndakota : 04-12-2009 alle 11:09. |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
Ah, ecco... mi ero perso qualcosa, ma in questo caso:
Codice:
if(!line.endsWith(";")){ if(!line.endsWith(" ")){ line+=" "; } line+=";"; } Se finisce con spazio viene aggiunto il solo ; Se finisce in qualsiasi altro modo viene aggiunto spazio e ; Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator |
![]() |
![]() |
![]() |
#8 |
Junior Member
Iscritto dal: Nov 2009
Messaggi: 13
|
Ho fugato ogni mio dubbio!! Grazie mille ancora!!!
![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Cioè questa: Codice:
"select * from users " Codice:
"select * from users ;"
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
Mmmm...
Mi pare che non fosse tra le ipotesi, altrimenti se finisce con ; ma contiene più spazi prima dello stesso andrebbe ripulita? Ipotizziamo comunque una terza versione (supponendo di non avere problemi con gli spazi in testa, altrimenti basta rifarsi una trimRight): Codice:
line=line.trim(); //si levano gli spazi in coda if(!line.endsWith(";")){ line+=" ;"; } Se termina con uno o più spazi vengono tolti tutti ed aggiunto " ;" Se termina in altro modo viene aggiunto " ;" Se si vuole ripulire anche gli eventuali spazi di troppo basterà aggiungere il ramo else, prendere la sottostringa fino al ;, trimmarla e procedere come sopra aggiungendo il " ;". Ciaociao ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:45.