|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
[JAVA] Espressioni Regolari
Ho un file scritto così:
Codice:
Nome Banca: La mia Banca Totale Soldi Banca: 1400.0 Tasso Standard: 0.1 Tasso Passivo Standard: 0.05 Massimo Scoperto Standard: -500.0 Forfait Spese: 20.0 Numerazione Conti: 3 Data Corrente: 8-2-2010 Data Ultimo Calcolo Saldo Finale: 8-2-2010 Codice:
try{
FileReader f=new FileReader("b.txt");
Scanner s=new Scanner(f);
s.useDelimiter("\n?[^:]+:\\s");
while(s.hasNext()){
System.out.print(s.next());
System.out.print("\n");
}
s.close();
f.close();
}catch(Exception e){
System.out.println(e.getMessage());
}
-Un eventuale ritorno a capo (eventuale perché infatti all'inizio non c'è) -Un qualsiasi numero di caratteri (>0) diversi da ":" -Un ":" -Uno spazio Ma il delimitatore così com'è non funziona, dopo un po' di tentativi e non mi ricordo neanche come ci sono arrivato ho trovato un'espressione funzionante: Codice:
"\n?[^:^\n]+:\\s" La domanda è: perché prima non funzionava? E perché dopo sì? C'è qualcosa che non mi torna. Risolto questo problema ho anche un'altra domanda da fare sulle espressioni regolari e su un problema che ho risolto sempre andando un po' a caso, ma andiamo con ordine... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
:.+?\n
io farei così. ps. considerando il carattere di new line \n, cambia da unix a windows. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Comunque quell'espressione non funziona, e in effetti non ne ho capito il senso, in particolare cosa vuol dire:
.+? . vuol dire qualsiasi carattere, + vuol dire una o più occorrenze di esso e ? zero o una occorrenza no? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Ok, credo di esserci arrivato, se scrivo:
\n?[^:]+:\\s la parte in rosso ingloba anche i \n, quindi in una stringa fatta così: Codice:
Nome Banca: La mia Banca Totale Soldi Banca: 1400.0 Tasso Standard: 0.1 Ora vorrei esporvi l'altro problema: come vedete dopo i delimitatori ci sono vari tipi di dato, nel codice faccio delle cose del tipo: Codice:
nomeBanca=s.next(); totaleSoldiBanca=Double.parseDouble(s.next()); ...eccetera numerazioneConti=Integer.parseInt(s.next()); Codice:
nomeBanca="La mia Banca ";
totaleSoldiBanca=Double.parseDouble("1400.0 ");
...eccetera
numerazioneConti=Integer.parseInt("3 ");
Comunque alla fine per risolvere ho usato come delimitatore "\\s?\n?[^:^\n]+:\\s" Grazie a chi mi risponderà EDIT: ci sono arrivato adesso, è il carriage return, non è uno spazio, il fatto è che lo escludevo per due motivi: non pensavo che fosse considerato uno spazio e neanche che venisse eliminato da un trim() (nelle prove che avevo fatto prima di modificare il delimitatore avevo usato il trim e funzionava). Scusate i post chilometrici per dei problemi forse per voi banali... Tra l'altro ero anche convinto che "\n".length() desse come risultato 2, dopo aver fatto questa prova ho capito tutto, non capivo neanche perché una cosa del tipo s.next()+"." desse come risultato ".a mia Banca" ora è tutto chiaro. Forse mettendo giù tutto qui sul forum mi sono anche schiarito le idee e quindi non è stato poi così inutile. Grazie lo stesso. Ciao! Ultima modifica di wingman87 : 10-02-2008 alle 13:21. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:38.



















