giovedì 26 settembre 2013

Q17

Given:

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:
 

Nessun commento:

Posta un commento