mercoledì 6 novembre 2013

Q34

Given the code fragment:

     String s = "Java 7, Java 6";
     Pattern p = Pattern.compile("Java.+\\d");
     Matcher m = p.matcher(s);
     while (m.find()) {
          System.out.println(m.group());
     }

What is the result?

A.
Java 7

B.
Java 6

C.
Java 7, Java 6

D.
Java 7
java 6

E.
Java

Risposta C

1) si definisce una stringa s = "Java 7, Java 6".

2)si definisce un Pattern p. Un pattern è una rappresentazione compilata di una espressione regolare.

Java. significa : ogni espressione che inizia con Java e a destra ha un qualunque carattere ( . ); nel nostro caso il carattere è uno spazio.

\\d Significa una cifra cioè un carattere in [0-9]

+ Indica una o più occorrenze.

Quindi Java.+\\d indica : trova tutte le sottostringhe che iniziano per Java, proseguono con un carattere qualsiasi e terminano con una qualunque cifra :
 

L’unica modalità richiesta dall’esame è quella greedy. L’espressione regolare sopra scritta può essere intesa in due modi :
 

Infatti .+ è greedy . Se avessimo voluto un quantificatore diverso, ad esempio reluctant avremmo dovuto usare:  .?+  .

Quindi l’unica corrispondenza che viene trovata è l’intera stringa.

3) Una volta creato il pattern, cioè il “comportamento” si può creare il matcher, cioè la “corrispondenza” tra l’ingresso e le regole dell’espressione regolare.

4)Il matcher a questo punto può essere scorso con il metodo find()che trova di volta in volta la corrispondenza successiva. In pratica quindi si stampano tutte le corrispondenze trovate.

Nessun commento:

Posta un commento