import java.util.Scanner;
public class Painting {
public static void main(String[] args)
{
String
input = "Pastel, *Enamel, Fresco,
*Gouache";
Scanner
s = new Scanner(input);
s.useDelimiter(",\\s*");
while (s.hasNext())
{
System.out.println(s.next());
}
}
}
What is the result?
A.
Paste1
Ename1
Fresco
Gouache
B.
Paste1
*Ename1
Fresco
*Gouache
C.
Pastel
Ename1
Fresco
Gouache
D.
Pastel
Ename1, Fresco
Gouache
La risposta è B
Scanner è un semplice scanner di testo
in grado di parsare tipi primitivi o String utilizzando le espressioni
regolari.
Uno Scanner spezza l’ingresso in pezzi
(token) a seconda del delimitatore stabilito, che di default è lo spazio.
I token risultanti possono poi essere
convertiti in tipi diversi utilizzando i vari metodi next messi a disposizione.
Il delimitatore può essere cambiato
tramite il metodo useDelimitator.
L’espressione usate nel delimitatore :
è ",\\s*" .
\s equivale a [ \t\n\r]
[ \t] spazi e tabulazioni
\n fine riga
\r ritorno a
capo (CR)
* indica zero o più
occorrenze (di un carattere o di un gruppo di caratteri)
Quindi s.useDelimiter(",\\s*"); va letta come :
Utilizza come nuovo delimitatore la
virgola ( , ) seguita da un numero qualunque (anche zero) di spazi, tabulazioni
fine riga o ritorni a capo. In pratica è un modo per includere ogni virgola
della stringa. Nel token quindi finisce tutto ciò che non è la virgola che viene stampato quando si usa il metodo next.
Riferimenti:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#useDelimiter(java.lang.String)
http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#useDelimiter(java.lang.String)
http://blog.chalda.it/guida-alla-sintassi-delle-espressioni-regolari-217.html
