[Java] Chiarimenti classe Scanner

GOPRO HERO4
Ciao a tutti, ho dei dubbi per quanto riguarda alcuni metodi della classe scanner. In particolare vorrei dei chiarimenti su quando devono essere utilizzati (e la loro funzione) dei seguenti metodi:
- next();
- nextLine();
- hasNext();
- hasNextLine().

Allora se ho ben capito i primi due metodi servono rispettivamente per leggere (ad esempio da un file di testo) una singola parola alla volta (next) e una riga alla volta(nextLine) fino a quando il testo non finisce.
I rimanenti due metodi non riesco a comprenderli.. So che si usano quando devo elaborare parola per parola (quindi effettuare la "tokenizzazione") però non mi è chiaro il loro funzionamento.
Spero nel vostro aiuto per chiarire i miei dubbi.

Grazie a tutti

Risposte
sapo931
Ciao, i metodi hasNext() e hasNextLine() semplicemente ti ritornano un valore booleano che ti dice se rispettivamente sono presenti nello stream di input elaborato dallo scanner un altro token (hasNext) o un'altra riga (hasNextLine).

Nota: I metodi next ti lanciano un'eccezione se non trovano nulla, quindi in teoria ti basterebbe gestire quella invece che aggiungere a mano un controllo con i metodi hasNext.

apatriarca
La principale ragione di usare hasNext rispetto all'uso delle eccezioni si ha probabilmente quando sia necessario scegliere tra diverse alternative. Supponiamo ad esempio si abbia qualcosa come segue:
ROTATE 45 X
ROTATE 30 1 0 1

In questo testo esistono due forme di "ROTATE". La prima prende un angolo e una stringa tra X, Y e Z mentre la seconda prende un angolo e i tre coefficienti dell'asse. Se si vuole fare il parsing di questa riga può essere utile usare hasNextDouble (o qualcosa del genere) per distinguere tra i due casi.

Le eccezioni sono invece probabilmente meglio nel caso in cui ci sia una singola alternativa e in cui quindi il fallimento del parsing sia un errore nell'input. In questo caso usare hasNext porterebbe in pratica a fare il parsing due volte di ogni cosa senza alcun reale vantaggio.

GOPRO HERO4
Grazie mille per le risposte, siete stati molto chiari

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.