|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2006
Messaggi: 149
|
[JAVA] Impostare i delimitatori della classe Scanner
Ciao, ho un noioso problema, non riesco ad impostare, attraverso il metodo useDelimiter() della classe Scanner, il delimitatore che salta tutti gli spazi fra una parola e l'altra (che è quello predefinito) contemporaneamente ad altro delimitatore formato da una stringa a mio piacimento.
Come si fa? ![]() Esempio: Gauss CarlFriedrich : 569079 (fra le parole ci sono tanti spazi, l'editor di testo del forum li elimina) stampato con un println deve risultare: Gauss CarlFriedrich 569079 Ultima modifica di Van47 : 08-02-2013 alle 16:36. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
Prova questo delimitatore:
\s+(:\s+)? \s+ seleziona gli spazi (:\s+)? seleziona, se ci sono, il : più uno o più spazi |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Dec 2006
Messaggi: 149
|
console.useDelimiter("\s+(:\s+)?");
il compilatore mi segnala il "\s" come carattere di escape illegale... ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2775
|
Questo perché il backslash '\' è il carattere di escape, quindi java non lo vede come singolo carattere ma prende anche il carattere successivo (in questo caso prende '\s') e tenta di ricondurlo ad una "sequenza di escape". Ma \s non è una sequenza di escape e quindi ti da errore. Per risolvere basta raddoppiare i backslash, in questo modo '\\' viene interpretato come un singolo carattere di backslash.
Per conoscere le sequenze di escape puoi vedere questa pagina (in fondo): http://docs.oracle.com/javase/tutori...haracters.html PS: se '\s' fosse stata una sequenza di escape valida non avresti ottenuto un errore di compilazione ma a runtime ovviamente la regex non sarebbe stata interpretata come desiderato e quindi non avrebbe funzionato lo stesso. Ultima modifica di wingman87 : 09-02-2013 alle 23:23. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:26.