wingman87
08-02-2008, 18:47
Ho un file scritto così:
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
Voglio leggerne i dati con uno Scanner utilizzando un'espressione regolare per prendere solo quello che c'è dopo il ":". A intuito avevo scritto una cosa così:
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());
}
Praticamente l'espressione dovrebbe definire un delimitatore fatto così:
-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:
"\n?[^:^\n]+:\\s"
Ho praticamente aggiunto quella parte in rosso.
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...
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
Voglio leggerne i dati con uno Scanner utilizzando un'espressione regolare per prendere solo quello che c'è dopo il ":". A intuito avevo scritto una cosa così:
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());
}
Praticamente l'espressione dovrebbe definire un delimitatore fatto così:
-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:
"\n?[^:^\n]+:\\s"
Ho praticamente aggiunto quella parte in rosso.
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...