java scanner class tutorial with examples
I denne opplæringen vil vi diskutere hvordan du importerer og bruker skannerklassen til Java sammen med dens forskjellige metoder, skanner-API og eksempler:
Vi har allerede sett standard Input-Output-metodene som brukes av Java for å lese / skrive data til standard I / O-enheter.
Java gir enda en mekanisme for å lese brukerinngang. Dette er skannerklassen. Selv om det ikke er veldig effektivt, er skannerklassen den enkleste og foretrukne måten å lese inndata i Java-programmer på.
=> Sjekk ALLE Java-opplæringsprogrammer her.
Hva du vil lære:
Java Scanner Class: En grundig titt
Skannerklasse brukes mest til å skanne inngangen og lese inngangen til primitive (innebygde) datatyper som int, desimal, dobbel osv. Skannerklassen returnerer i utgangspunktet den tokeniserte inngangen basert på noe avgrensningsmønster. Dermed, generelt, hvis du vil lese typen dt, kan du bruke funksjonen nextdt () til å lese inngangen.
En skannerklasse implementerer grensesnittene Iterator (string), Closeable og AutoCloseable.
La oss utforske detaljene i denne skannerklassen nå.
Importer skanner
Skannerklasse tilhører pakken “java.util”. For å bruke skannerklassen i programmet, må du importere denne pakken som følger.
importer java.util. *
ELLER
importere java.util.Scanner;
En av ovennevnte utsagn vil importere skannerklassen og dens funksjonalitet i programmet ditt.
Java skannerklasse
Når skannerklassen er importert til Java-programmet, kan du bruke den til å lese innspill fra forskjellige datatyper. Avhengig av om du vil lese inngangen fra standardinngang eller fil eller kanal, kan du sende det passende forhåndsdefinerte objektet til skannerobjektet.
Nedenfor er et grunnleggende eksempel på bruk av skannerklasser.
import java.util.*; public class Main { public static void main(String args()) { Scanner in = new Scanner (System.in); System.out.print ('Enter a String: '); String mystr = in.nextLine(); System.out.println('The String you entered is: ' + mystr); in.close(); } }
Produksjon:
I det ovennevnte programmet har vi gitt 'System.in' (standard inngang) som objekt mens vi opprettet et skannerklasseobjekt. Så leser vi en strenginngang fra standardinngangen.
Skanner-API (konstruktører og metoder)
I denne delen vil vi utforske skannerklassen API i detalj. Skannerklassen inneholder forskjellige overbelastede konstruktører for å imøtekomme ulike inndatametoder som System.in, filinngang, bane osv.
Følgende tabell gir prototypen og beskrivelsen av hver av skannerklassekonstruktørene.
hvordan legge maven til formørkelse
Ikke | Prototype | Beskrivelse |
---|---|---|
7 | Skanner (banekilde, streng charsetName) | Denne konstruktøren konstruerer en ny skanner som skanner den angitte filen og produserer verdiene |
1 | Skanner (InputStream-kilde) | Denne konstruktøren konstruerer en ny skanner som skanner den nye InputStream, kilder og produserer verdiene |
to | Skanner (InputStream-kilde, String charsetName) | Denne konstruktøren konstruerer en ny skanner som skanner den nye InputStream, kilder og produserer verdiene |
3 | Skanner (filkilde) | Denne konstruktøren konstruerer en ny skanner som skanner den angitte filen og produserer verdiene |
4 | Skanner (filkilde, strengtegnnavn) | Denne konstruktøren konstruerer en ny skanner som skanner den angitte filen og produserer verdiene |
5 | Skanner (strengkilde) | Denne konstruktøren konstruerer en ny skanner som skanner den angitte strengen og produserer verdiene |
6 | Skanner (banekilde) | Denne konstruktøren konstruerer en ny skanner som skanner den angitte filen og produserer verdiene |
8 | Skanner (lesbar kilde) | Denne konstruktøren konstruerer en ny skanner som skanner den angitte kilden og produserer verdiene |
9 | Skanner (ReadableByteChannel kilde) | Denne konstruktøren konstruerer en ny skanner som skanner den spesifiserte kanalen og produserer verdiene |
10 | Skanner (ReadableByteChannel kilde, streng charsetName) | Denne konstruktøren konstruerer en ny skanner som skanner den spesifiserte kanalen og produserer verdiene |
Akkurat som konstruktører, gir skannerklassen også mange metoder som brukes til å skanne og lese inngangen. Det gir forskjellige boolske metoder som lar deg sjekke om neste token i inngangen er et token av en bestemt datatype.
Merk at for hver konstruktør kan du enten bare gi ett argument med det forhåndsdefinerte inngangsobjektet eller to argumenter som består av forhåndsdefinerte inngangsobjekt og tegnsett. I tilfelle av ett argument antas standard tegnsett.
Det er også metoder for å hente tokens av hver datatype.
Andre metoder inkluderer metoder for å stille inn sted, radix, matche mønstre, lukke skanner osv.
Tabellen nedenfor gir prototypen og beskrivelsen av hver av de grunnleggende skannemetodene.
Ikke | Prototype | Beskrivelse |
---|---|---|
7 | Boolsk hasNextFloat () | Sjekker om neste token i skannerinngangen er av flytetype |
1 | Boolsk hasNext () | Returnerer sant hvis det er et annet token i skannerens inngang |
to | Boolsk hasNextBigDecimal () | Sjekker om neste token i skannerinngangen er av bigDecimal-type. |
3 | Boolsk hasNextBigInteger () | Sjekker om neste token i skannerinngangen er av bigInteger-typen |
4 | Boolsk hasNextBoolean () | Sjekker om neste token i skannerinngangen er av boolsk type |
5 | Boolsk hasNextByte () | Sjekker om neste token i skannerinngangen er av typen Byte |
6 | Boolsk hasNextDouble () | Sjekker om neste token i skannerinngangen er av dobbel type |
8 | Boolsk hasNextInt () | Sjekker om neste token i skannerinngangen er av heltallstype |
9 | Boolsk hasNextLine () | Sjekker om neste token i skannerinngangen er en annen linje |
10 | Boolsk hasNextLong () | Sjekker om neste token i skannerinngangen er av lang type |
elleve | Boolsk hasNextShort () | Sjekker om neste token i skannerinngangen er av kort type |
12 | Streng neste () | Skanner inngangen for neste komplette token |
1. 3 | BigDecimal nesteBigDecimal () | Skanner inngangen for neste BigDecimal-token |
14 | BigInteger nesteBigInteger () | Skanner inngangen for neste BigInteger-token |
femten | Boolsk neste boolsk () | Skanner inngangen for neste boolske symbol |
16 | Byte nextByte () | Skanner inngangen for neste byte-token |
17 | Dobbel nesteDobbelt () | Skanner inngangen for neste Double token |
18 | Flyt nesteFloat () | Skanner inngangen for neste float token |
19 | Int nesteInt () | Skanner inngangen for neste heltallstoken |
tjue | Streng neste linje () | Få inngangsstrengen hoppet over fra skannerobjektet |
tjueen | Lang nesteLang () | Skanner inngangen for neste Langtall-token |
22 | Kort nesteShort () | Skanner inngangen for neste korte heltall |
2. 3 | Tilbakestill skanner () | Tilbakestill skanneren som er i bruk |
24 | Hopp over skanner () | Ignorer skilletegn og hopp over inngangen som samsvarer med det gitte mønsteret |
25 | Skanner useDelimiter () | Sett avgrensningsmønsteret til det angitte mønsteret |
26 | Scanner useLocale () | Sett Scanners locale-objektet med den gitte locale |
27 | Scanner useRadix () | Angi den angitte radiksen som standardradiksen for skanneren |
28 | Int radix () | Returnerer standard radiks for gjeldende skanner |
29 | ugyldig fjerne () | Kan brukes når Iterator ikke støtter fjerning |
30 | Strøm tokens () | Returnerer en strøm med skilletegn som er skilt fra gjeldende skanner |
31 | String toString () | Returstrengrepresentasjonen for den aktuelle skanneren som er i bruk |
32 | IOException ioException () | Returnerer IOException sist kastet av lesbar av skannerobjektet |
33 | Stream findALL () | Returnerer strømmen av kampresultater som samsvarer med det gitte mønsteret |
3. 4 | String findInLine () | Finn neste forekomst av mønsteret fra den gitte strengen; ignorerer avgrensere |
35 | String findWithinHorizon () | Finn neste forekomst av mønsteret fra den gitte strengen; ignorerer avgrensere |
36 | Mønsteravgrensning () | Returnerer mønsteret som brukes av gjeldende skanner |
37 | Gyldig lukk () | Lukker skanneren |
38 | MatchResult-kamp () | Returnerer samsvarende resultat for siste skanningsoperasjon |
39 | Lokal lokal () | Returner lokaliteten til gjeldende skanner |
Sjekk her for å vite mer om skannermetodene.
Hvordan bruke skanneren i Java?
Nå som du har sett de forskjellige konstruktørene og metodene som tilbys av Scanner-klassen, la oss nå implementere noen av eksemplene for å demonstrere hvordan du bruker Scanner-klassen i Java.
Følgende implementering viser bruken av skannerklasse for å lese innganger fra System.in dvs. standardinngangen.
Her bruker vi et forhåndsdefinert System.in-objekt for å lage et skannerobjekt. Brukeren blir deretter bedt om å angi navn, klasse og prosentandel. Alle disse detaljene leses ved hjelp av klasseobjektet Skanner.
Legg merke til metodene som brukes av skannerobjekter for å lese forskjellige typer innganger. Siden navnet er en streng, bruker skannerobjektet neste () -metode. For klasseinngang bruker den nextInt () mens den for prosent bruker nextFloat ().
På denne måten kan du enkelt adskille inngangen mens du leser.
Programmets utgang viser inngangen som skrives inn og informasjonen som vises.
import java.util.*; public class Main{ public static void main(String ()args){ String name; int myclass; float percentage; //creating object of Scanner class Scanner input = new Scanner(System.in); System.out.print('Enter your name: '); name = input.next(); System.out.print('Enter your class: '); myclass = input.nextInt(); System.out.print('Enter your percentage: '); percentage = input.nextFloat(); input.close(); System.out.println('Name: ' + name + ', Class: '+ myclass + ', Percentage: '+ percentage); } }
Produksjon:
Skannerstreng
Som allerede nevnt kan du bruke forskjellige forhåndsdefinerte objekter mens du oppretter et skannerobjekt. Dette betyr at du enten kan lese inngangen fra standardinngang, filer og forskjellige I / O-kanaler eller fra strenger også.
Når en strenginngang brukes, kan du også bruke vanlige uttrykk inne i den.
Følgende eksempler viser programmet der Scanner bruker en streng som inngang. Denne inngangen skannes og tokens skilles ved å lese hvert token.
Tokene som blir lest vises deretter i utdataene.
import java.util.*; public class Main{ public static void main(String ()args){ System.out.println ('The subjects are as follows :'); String input = '1 Maths 2 English 3 Science 4 Hindi'; Scanner s = new Scanner(input); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); System.out.print(s.nextInt()+'. '); System.out.println(s.next()); s.close(); } }
Produksjon:
Lukk skanneren
Java Scanner-klasse bruker 'Close ()' -metoden for å lukke skanneren. Skannerklassen implementerer også et grensesnitt som kan lukkes internt, og hvis skanneren ikke allerede er lukket, påkaller det underliggende lesbare grensesnittet den nære metoden.
Det er en god programmeringspraksis å eksplisitt lukke skanneren ved hjelp av Close () -metoden når du er ferdig med å bruke den.
Merk: Hvis skannerobjektet lukkes og det blir gjort et forsøk på å søke, resulterer det i 'IllegalStateException'.
ofte stilte spørsmål
Q # 1) Hva er skannerklassen i Java?
Svar: Scanner-klassen er en del av Java-pakken 'Java' og brukes til å lese input av forskjellige primitive datatyper som int, float, strings, etc.
ytelsesjustering i spørsmål om orakelintervju
Q # 2) Hva er forskjellen mellom neste () og nextLine () -metoder i skannerklassen?
Svar: Metoden neste () leser inngang til mellomrom og plasserer markøren på samme linje etter å ha lest inngangen. Metoden nextLine () leser imidlertid hele inngangslinjen til slutten av linjen inkludert mellomrom.
Q # 3) Hva er hasNext () i Java?
Svar: Metoden hasNext () er en av Java Scanner-metodene. Denne metoden blir sant hvis skanneren har et annet token i inngangen.
Spørsmål 4) Trenger du å lukke en skannerklasse?
Svar: Det er bedre, men ikke obligatorisk, å lukke skannerklassen som om den ikke er lukket. Det underliggende lesbare grensesnittet til skannerklassen gjør jobben for deg. Kompilatoren kan blinke noen advarsler, men hvis den ikke er lukket.
Så som en god programmeringspraksis, lukk alltid skanneren.
Sp # 5) Hva er hensikten med “system.in” i skannerklassen?
Svar: Ved å bruke “System.in” i skannerklassen, lar du skanneren lese tastaturet som er koblet til standard inngangsdata.
Konklusjon
I denne veiledningen har vi sett skannerklassen og alle dens detaljer, inkludert API og implementering. Skannerklasse brukes til å lese inngangsdata fra en rekke medier som standardinngang, filer, IO-kanaler, strenger med / uten regulære uttrykk, etc.
Selv om skanneren ikke er en veldig effektiv måte å lese inndata på, er det en av de enkleste måtene. Skanneren lar deg lese inngangen til forskjellige primitive datatyper som int, float, strenger, etc. Når du bruker strenger som inndataobjekt for skannerklassen, kan du også bruke vanlige uttrykk med den.
Skannerklassen lar deg også lese innspill ved å matche noe mønster eller avgrensning.
For å konkludere er bruk av skannerklasse i Java den enkleste og foretrukne måten å lese inndata på.
=> Ta en titt på den perfekte Java-treningsguiden her.
Anbefalt lesing
- Hva er Java Vector | Java Vector Class Tutorial med eksempler
- Java Array Class Tutorial - java.util.Arrays Class med eksempler
- JAVA-opplæring for nybegynnere: 100+ praktiske Java-videoveiledninger
- Java-grensesnitt og abstrakt klasseopplæring med eksempler
- Java Reflection Tutorial med eksempler
- Jagged Array In Java - Opplæring med eksempler
- Java Array Length Tutorial med kodeeksempler
- Java String Tutorial | Java strengmetoder med eksempler