De klasse `Scanner` in Java accepteert verschillende parameters in zijn constructors, die van invloed zijn op de manier waarop invoer wordt gelezen. De meest voorkomende constructeurs zijn:
* `Scanner (InputStream-bron)`: Dit is de meest algemene constructor. Er is een 'InputStream' als argument nodig, wat een stroom bytes vertegenwoordigt. Hierdoor kun je uit verschillende bronnen lezen:
* `System.in`:leest van de standaardinvoer (meestal het toetsenbord). Dit is het meest voorkomende gebruik.
* `new FileInputStream("myfile.txt")`:Leest uit een bestand. Je hebt de juiste foutafhandeling nodig (bijvoorbeeld `try-catch` blokken) om potentiële `FileNotFoundException` te beheren.
* `new ByteArrayInputStream(byteArray)`:leest van een byte-array. Handig voor het testen of verwerken van gegevens in het geheugen.
* `Scanner (leesbare bron)`: Deze constructor is vergelijkbaar met de `InputStream`-constructor, maar gebruikt de `Readable`-interface. 'Leesbaar' is een algemenere interface dan 'InputStream' en omvat een breder scala aan invoerbronnen. 'Reader'-klassen (zoals 'FileReader', 'StringReader', enz.) implementeren 'Readable'.
* `Scanner (bestandsbron)`: Een gemaksconstructor die rechtstreeks een `File`-object als invoer neemt. Intern creëert dit een `FileInputStream`. Vereist foutafhandeling voor `FileNotFoundException`.
* `Scanner(String-bron)`: Hierdoor wordt een scanner gemaakt die uit een bepaalde string leest. Handig voor het testen of verwerken van stringgegevens zonder externe bestanden.
Er worden geen andere parameters rechtstreeks doorgegeven aan de Scanner-constructor. U kunt echter *hoe* de scanner werkt via de volgende methoden:
* `useDelimiter(...)`: Wijzigt het scheidingsteken dat wordt gebruikt om tokens (woorden of cijfers) van elkaar te scheiden. Standaard wordt er gebruik gemaakt van witruimte. U kunt een reguliere expressie opgeven als scheidingsteken.
* `useLocale(...)`: Stelt de landinstelling in, die van invloed is op de getalnotatie en tekencategorisatie.
* `nextLine()` , `nextInt()` , `nextDouble()` enz.: Deze methoden zijn geen constructorparameters, maar ze bepalen *hoe* de scanner gegevens uit de invoerbron leest.
Samenvattend:hoewel de constructor slechts één argument aanneemt (een `InputStream`, `Readable`, `File` of `String`), wordt het gedrag van de scanner na het maken verder aangepast door de methoden ervan. Denk aan de juiste afhandeling van uitzonderingen, vooral als het om bestandsinvoer gaat. |