progir ha scritto:
Salve, volevo sapere qual' è la differenza tra prendere in input stringhe da uno Scanner o da un Buffered Reader ??
Presupponendo che non ci siano differenze nello strato più sottostante (es. entrambe hanno come sorgente System.in), le differenze sono solo "tecniche" nella API tra Scanner e BufferedReader.
BufferedReader è specializzata nel saper bufferizzare i caratteri (ha un buffer interno) e nel saper leggere "a righe". Non sa fare altro di specifico. Inoltre qualunque errore di I/O viene esposto lanciando IOException.
Scanner sa fare molte cose, sa estrarre token anche di svariati tipi e in modo sofisticato, usando una espressione regolare per il deliminatore. Non a caso, in certi libri, viene definita "
la Cadillac della tokenizzazione". Sul fronte della gestione degli errori invece è meno pignola/rigorosa, i suoi metodi di lettura
non lanciano IOException. Al massimo lanciano alcune altre eccezioni che tra l'altro sono "unchecked" (vedi javadoc).
Se vuoi sapere quale è stata l'ultima eccezione IOException lanciata dallo stream sottostante, allora devi chiamare tu esplicitamente ioException().
Morale: se devi leggere da System.in, allora Scanner va benissimo. Difficilmente ci sono problemi di I/O dallo standard-input. Se invece devi leggere un file di testo e vuoi farlo in modo rigoroso, ricevendo notifica di qualunque errore, allora BufferedReader (o altra classe di I/O).