La classe `Scanner` en Java accepte plusieurs paramètres dans ses constructeurs, influençant la façon dont elle lit les entrées. Les constructeurs les plus courants sont :
* `Scanner (source InputStream)` : C'est le constructeur le plus général. Il prend un `InputStream` comme argument, qui représente un flux d'octets. Cela vous permet de lire à partir de diverses sources :
* `System.in` :lit à partir de l'entrée standard (généralement le clavier). C'est l'usage le plus courant.
* `new FileInputStream("myfile.txt")` :lit à partir d'un fichier. Vous aurez besoin d'une gestion appropriée des erreurs (par exemple, des blocs « try-catch ») pour gérer les potentielles « FileNotFoundException ».
* `new ByteArrayInputStream(byteArray)` :lit à partir d'un tableau d'octets. Utile pour tester ou traiter des données en mémoire.
* `Scanner (source lisible)` : Ce constructeur est similaire au constructeur `InputStream` mais utilise l'interface `Readable`. `Readable` est une interface plus générale que `InputStream`, englobant une plus large gamme de sources d'entrée. Les classes `Reader` (comme `FileReader`, `StringReader`, etc.) implémentent `Readable`.
* `Scanner (source du fichier)` : Un constructeur pratique qui prend directement un objet `File` en entrée. En interne, cela crée un `FileInputStream`. Nécessite une gestion des erreurs pour `FileNotFoundException`.
* `Scanner (source de chaîne)` : Cela crée un scanner qui lit une chaîne donnée. Utile pour tester ou traiter des données de chaîne sans fichiers externes.
Aucun autre paramètre n'est directement transmis au constructeur Scanner. Cependant, vous pouvez influencer le *comment* le scanner fonctionne grâce à ses méthodes :
* `useDelimiter(...)` : Modifie le délimiteur utilisé pour séparer les jetons (mots ou nombres). Par défaut, il utilise des espaces. Vous pouvez spécifier une expression régulière comme délimiteur.
* `useLocale(...)` : Définit les paramètres régionaux, qui affectent le formatage des nombres et la catégorisation des caractères.
* `nextLine()` , `nextInt()` , `nextDouble()` etc. : Ces méthodes ne sont pas des paramètres de constructeur, mais elles contrôlent *comment* le scanner lit les données de la source d'entrée.
En résumé, alors que le constructeur ne prend qu'un seul argument (un `InputStream`, `Readable`, `File` ou `String`), le comportement du scanner est davantage personnalisé par ses méthodes après la création. N'oubliez pas de gérer correctement les exceptions, en particulier lorsqu'il s'agit d'entrée de fichier.
|