PDA

View Full Version : [JAVA] Impostare i delimitatori della classe Scanner


Van47
08-02-2013, 16:31
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?:D

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

wingman87
08-02-2013, 16:46
Prova questo delimitatore:
\s+(:\s+)?
\s+ seleziona gli spazi
(:\s+)? seleziona, se ci sono, il : più uno o più spazi

Van47
09-02-2013, 10:49
console.useDelimiter("\s+(:\s+)?");

il compilatore mi segnala il "\s" come carattere di escape illegale... :(

wingman87
09-02-2013, 23:20
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/tutorial/java/data/characters.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.