|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2009
Messaggi: 129
|
[JAVA] ... ed espressioni regolari
Salve.
Ho un JTextField in cui vorrei che fosse possibile immettere solo numeri,interi e in virgola mobile.Un utente che la utilizza dovrà essere quindi in grado di poter immettere solo stringhe del tipo: 10 1.3 -2 -2.5 Girovagando su goole ho trovato questa classe che permettesse di inserire tramite espressione regolare solo dei valori numerici nel JTextField: Codice:
import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; public class NumberDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if(str!=null && str.matches("[0-9]*")) super.insertString(offs, str, a); } } Codice:
campoTesto=new JTextField(15); campoTesto.setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.BLUE)); campoTesto.setHorizontalAlignment(JTextField.RIGHT); campoTesto.setDocument(new NumberDocument()); In pratica setto tramite l'espressione regolare un Document per JTextField. Come faccio a modificare l'espressione regolare affinche mi accetti anche stringhe che rappresentino numeri in virgola mobile e che eventualmente possono essere anche negativi? Non ricordo molto su questo argomento ![]() Grazie anticipate per le risp |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 1059
|
questa dovrebbe andare
![]() Codice:
-{0,1}[0-9]*\.*[0-9]* Codice:
str.matches("[-{0,1}[0-9]*\\.*[0-9]*") |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2009
Messaggi: 129
|
funziona perfetto,ti ringrazio.
Avevo scritto la stessa espr. regolare,ma sbagliavo la sintassi con cui java le accetta. Ora se volessi che SOLO IL PRIMO CARATTERE INSERITO POSSA ESSERE - o + dovrei fare un controllo sull'input?? non posso farlo tramite expr regolare vero??? In questo modo è vero che l'utente può inserire sia segno che virgola che numero però potrebbe anche inserire qualcosa senza senso del tipo: 34-3.4.2.....3 Piu precisamente: Posso costruire la FORMA DELL'input attraverso espr regolare o posso solo dire quali sono i caratteri ammessi.Io ricordo che in pratica le espr regolare servivano proprio per comporre la struttura delle stringhe.Del tipo che l'alfabeto erano i segni accettati(nel mio caso Alfabeto={0,1,2,3,4,5,6,7,8,9,-,.} e per struttura l'espressione regolare che mi hai appena scritto. Cosi però è vero che permetti di scrivere solo quei simboli,ma posso metterli come mi pare.Consigli? |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
asterisco significa 0 o piu volte, quindi questo se non erro dovrebbe accettare anche cose come queste: 123.......456
io scriverei cosi (gli slash sono giá raddoppiati affinché la stringa possa essere inserita nel codice): Codice:
"[\\-|\\+]?[0-9]*\\.?[0-9]*" |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 1059
|
senza considerare il +
per risolvere il problema del punto: Codice:
-?[0-9]*\\.?[0-9]* ![]() quella di fero86 va benissimo Ultima modifica di Energy++ : 26-06-2009 alle 22:44. |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: May 2009
Messaggi: 129
|
confermo che funziona a livello "alfabetico".Va meno bene dal punto di vista strutturale.Eppure sembra essere chiara la struttura a livello di espressione regolare.Mi chiedo se per ottenere la struttura devo gestire la cosa a livello di if/else nel corpo della stringa.
Ripeto che ora è vero che posso scrivere solo: numeri , - , . Il problema è che potrei anche inserire qualcosa del genere: 33-....5.3. Questo qualcosa non va bene per la mia applicazione.Voglio che sia ben formattato quel che inserisce l'utente nel JTextField.Ovvero: -1.3 (ovvero un qualsiasi numero decimale che può eventualmente essere negativo ed in virgola mobile) |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 1059
|
no, non puoi scrivere
33-....5.3. str.matches("-?[0-9]*\\.?[0-9]*") ritornerà true solo con 12, -12, 12.44, -12.55 str.matches("[\\-|\\+]?[0-9]*\\.?[0-9]*") ritornerà true solo con 2, -12, 12.44, -12.55, +12, +56.6 in tutti gli altri casi ritornerà false Ultima modifica di Energy++ : 26-06-2009 alle 23:16. |
![]() |
![]() |
![]() |
#8 | |
Member
Iscritto dal: May 2009
Messaggi: 129
|
Quote:
![]() Grazie per le risposte comunque!Saluti! |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
non basterebbe questa?
Codice:
[-|+][0-9]*.[0-9]*
__________________
![]() |
![]() |
![]() |
![]() |
#10 |
Bannato
Iscritto dal: Jun 2009
Messaggi: 7
|
Io userei le libererie BoIG e introdurrei un parametro offuscato per indicizzare i dati per poi passarli al Jreader massimizzando le prestazioni...
|
![]() |
![]() |
![]() |
#11 |
Bannato
Iscritto dal: Jun 2009
Messaggi: 7
|
.
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
ci sono tre errori: primo, questa ti obbliga a mettere + o -, secondo il carattere - tra parentesi quadre serve ad esprimere ranges di caratteri quindi sarebbe meglio farne l'escaping, e terzo nelle espressioni regolari il punto significa "qualsiasi carattere", quindi di questo devi sicuramente fare l'escaping; correggendo queste tre cose e facendo per sicurezza anche l'escaping del carattere + (che nelle espressioni regolari significa "una o piu volte") ottieni pari pari la mia
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:31.