Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-06-2009, 21:30   #1
javacomelava
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);
    }
}
Questo è il codice della JTextField:
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
javacomelava è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2009, 21:51   #2
Energy++
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1060
questa dovrebbe andare

Codice:
-{0,1}[0-9]*\.*[0-9]*
e quindi

Codice:
str.matches("[-{0,1}[0-9]*\\.*[0-9]*")
Energy++ è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2009, 22:22   #3
javacomelava
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?
javacomelava è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2009, 23:31   #4
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da Energy++ Guarda i messaggi
questa dovrebbe andare

Codice:
-{0,1}[0-9]*\.*[0-9]*
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]*"
non so se é giusto.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2009, 23:41   #5
Energy++
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1060
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 23:44.
Energy++ è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2009, 00:00   #6
javacomelava
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)
javacomelava è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2009, 00:12   #7
Energy++
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1060
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++ : 27-06-2009 alle 00:16.
Energy++ è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2009, 00:32   #8
javacomelava
Member
 
Iscritto dal: May 2009
Messaggi: 129
Quote:
Originariamente inviato da Energy++ Guarda i messaggi
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
Guarda,ho fatto copia e incolla ma niente...solo alfabeticamente rispetta i vincoli,non a livello strutturale.In ogni caso ho risolto con un pò di if else nel corpo di getText() del mio JTextField.Domani al massimo vi posto il codice dell'applicazione(che altro non è che una semplice calcolatrice....sto impratichendomi con swing )

Grazie per le risposte comunque!Saluti!
javacomelava è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2009, 13:41   #9
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
non basterebbe questa?
Codice:
[-|+][0-9]*.[0-9]*
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2009, 14:24   #10
00pipp00
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...
00pipp00 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2009, 14:35   #11
00pipp00
Bannato
 
Iscritto dal: Jun 2009
Messaggi: 7
.
00pipp00 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2009, 14:45   #12
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
non basterebbe questa?
Codice:
[-|+][0-9]*.[0-9]*
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
fero86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
11 prezzi imperdibili in Amazon: non sol...
Giù i prezzi di Xiaomi 17T e Xiao...
Una tassa di 5,5 centesimi su ogni gigab...
Vuoi clonare un videogioco con l'IA? Cla...
Furto da 6,3 miliardi di dollari, Binanc...
Gli USA dipendono dai robot stranieri: T...
Volkswagen non ha più soldi per l...
Telescopio spaziale Hubble: la NASA cerc...
Più sottile e potente: le nuove i...
Il JPL estende la vita operativa della s...
DAZN Full è in offerta: tutta la ...
GTA 6 su PC potrebbe arrivare prima del ...
Da zero al tracciato in secondi: LibreCo...
Il regista Rian Johnson lancia a 12,99 d...
Microsoft stravolge l'app Sicurezza di W...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:49.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v