Sådan bruges scanner i Java

How Use Scanner Java



Scanneren i Java er en klasse i java.util -pakken. Denne klasse har til formål at læse input fra en streng, tastaturet, filen eller netværksstikket. Denne artikel koncentrerer sig kun om at læse input fra tastaturet og vise resultatet i terminalvinduet. Lignende ideer kan bruges til at læse input fra filen eller netværkskanalen. Scanneren udskriver ikke til terminalvinduet. Brug objektet System.out til at udskrive til terminalen. Det er enkelt at bruge dette objekt til at udskrive til terminalen, som vist nedenfor.

For at bruge scannerklassen skal den først importeres. Derefter skal et objekt instantieres fra det. Efter brug af scannerobjektet skal det lukkes. Inputstrømobjektet, der repræsenterer tastaturet, er System.in. Scanneren har mange metoder. Kun de almindeligt anvendte vil blive forklaret i denne artikel.







Artikelindhold



Enkel brug af scannerklassen

Følgende kode beder brugeren om at indtaste en sætning, og derefter viser den sætningen:



importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
Scanner scanningObj= nyScanner( System .i);
System .ud.println('Indtast en sætning, og tryk på Enter:');

Snor dømme=scanObj.nextLine();
System .ud.println(dømme);

scanObj.tæt();
}
}

Den første linje importerer scannerklassen. I hovedfunktionen opretter den første linje et scannerobjekt ved hjælp af System.in -objektet til tastaturet. Så snart scannerobjektet er oprettet, begynder det at vente på input. Den næste linje udskriver en erklæring og beder brugeren om at indtaste en sætning. Linjen, der følger i koden, bruger metoden nextLine () i scannerobjektet til at læse brugerens sætning, efter at han har trykket på Enter. Linjen efter, i koden, genoptrykker sætningen i terminalvinduet. Den sidste linje lukker scannerobjektet.





Spytter inputlinje i værdier

Følgende kode opdeler inputlinjen i ord (tokens) ved at bruge mellemrummet som afgrænser:

importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
Scanner scanningObj= nyScanner( System .i);
System .ud.println('Indtast en linje med tokens, og tryk på Enter:');

mens(scanObj.harNæste()){
System .ud.println(scanObj.Næste());
}

scanObj.tæt();
}
}

hasNext () og next () er to andre metoder til scannerobjektet. Når scannerobjektet læser en linje, beholder den den. next () får adgang til det næste token (word). hasNext () returnerer true, hvis der er et andet token, der endnu ikke er åbnet.



Desværre forventes det stadig, at brugeren indtaster input til opdeling og genvisning med denne kode. For at afslutte alt det, skal du trykke på Ctrl+z, og du skal være tilbage ved kommandoprompten.

I ovenstående kode adskiller afgrænseren tokens i rummet. En anden karakter kan bruges. Følgende kode bruger kommaet. Glem ikke at trykke på Ctrl+z for at afslutte sløjfen, hvis du tester koden.

importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
Scanner scanningObj= nyScanner( System .i);
System .ud.println('Indtast en linje med tokens, og tryk på Enter:');

scanObj.useDelimiter(',');

mens(scanObj.harNæste()){
System .ud.println(scanObj.Næste());
}

scanObj.tæt();
}
}

Hvis du testede koden, ville du have bemærket, at mellemrum i tokens er inkluderet som en del af tokens (output). Udtrykket, scanObj.useDelimiter (,); indtastet efter indtastningslinjen er blevet læst; det er det, der gør komma, afgrænseren.

Læsning og validering af primitive datatyper

nextBoolean () metode

I den følgende kode forventes det, at brugeren skriver enten sandt eller falsk uden anførselstegn og derefter trykker på Enter -tasten, hvis brugeren skriver noget andet, f.eks. Ja eller nej, vil der blive vist en fejlmeddelelse.

importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
System .ud.Print('Er du over 24? ');
Scanner scanningObj= nyScanner( System .i);

boolskbl=scanObj.næste boolske();
hvis (bl== sand) {
System .ud.println('Du er over 24');
}
andet hvis (bl== falsk) {
System .ud.println('Du er under 24');
}

scanObj.tæt();
}
}

Da java udsender en fejlmeddelelse, så længe input ikke er sandt eller falsk nøjagtigt, har ellers været brugt i stedet for andet.

Forskellen mellem metoderne, print og println, er, at print forventer input på den aktuelle linje, mens println forventer input på den næste linje.

nextByte () metode

Med ASCII -tegnsættet er et tegn en byte. Men med nogle østlige tegnsæt kan et tegn bestå af mere end en byte. Uafhængigt af tegnsættet læser og validerer nextByte -metoden den næste byte af input. Følgende kode kan bruges til dette formål:

importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
System .ud.Print('Type nummer<128, press Enter: ');
Scanner scanningObj= nyScanner( System .i);

bytebt=scanObj.næsteByte();
System .ud.println(bt);

scanObj.tæt();
}
}

Hvis der er indtastet et tal større end 127 eller et alfabettegn for denne kode, vil der blive udsendt en fejlmeddelelse.

nextInt () Metode

Det næste heltalstoken som input kan også valideres og accepteres. Følgende kode kan bruges:

importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
System .ud.Print('Indtast et hvilket som helst heltal:');
Scanner scanningObj= nyScanner( System .i);

intpå en=scanObj.næsteInt();
System .ud.println(på en);

scanObj.tæt();
}
}

Ledende eller bageste mellemrum er blevet fjernet. For denne kode accepteres enhver heltalværdi, inklusive værdier større end 127. Med disse nextXXX () -metoder udsendes der en fejlmeddelelse, når valideringen mislykkes.

nextBigInteger () Metode

Det ser ud til, at softwareingeniører aldrig vil stoppe med at finde på nye ting. Et stort heltal er et helt tal, hvis værdi er meget større end et heltal. Men med Java kan det læses på samme måde som heltalet. Følgende kode illustrerer dette:

importere java.util.Scanner;
importere java.math.BigInteger;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
System .ud.println('Indtast et hvilket som helst heltal for stort heltal:');
Scanner scanningObj= nyScanner( System .i);

BigInteger på en=scanObj.nextBigInteger();
System .ud.println(på en);

scanObj.tæt();
}
}

Bemærk importopgørelsen, import java.math.BigInteger ;. Bemærk også, at den store heltalstype er begyndt med en stor B og ikke en lille b.

nextFloat () metode

Det næste float -token som input kan også valideres og accepteres. Følgende kode kan bruges:

importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
System .ud.Print('Indtast enhver flyder:');
Scanner scanningObj= nyScanner( System .i);

flydepå en=scanObj.næste flyd();
System .ud.println(på en);

scanObj.tæt();
}
}

Et eksempel på et float -nummer er 23.456. Ledende eller bageste mellemrum er blevet fjernet.

næsteDobbelt ()

Det næste dobbelte token som input kan også valideres og accepteres. Følgende kode kan bruges:

importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
System .ud.Print('Indtast en vilkårlig dobbelt:');
Scanner scanningObj= nyScanner( System .i);

dobbeltpå en=scanObj.næsteDobbelt();
System .ud.println(på en);

scanObj.tæt();
}
}

Et eksempel på et dobbelt tal er 23.456. Et dobbelt tal er forskelligt fra en float, fordi det har mindre fejlmargin. Ledende eller bageste mellemrum er blevet fjernet.

nextLine () metode

Metoden nextLine () er for en streng. Hvis strengen er inputlinjen fra tastaturet efter at have trykket på Enter, kan den have den nye linjetegn, ' n'. Følgende kode kan bruges:

importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
System .ud.println('Indtast en linje med\n: ');
Scanner scanningObj= nyScanner( System .i);

Snor s=scanObj.nextLine();
System .ud.println(s);

scanObj.tæt();
}
}

Bemærk, at strengtypen er begyndt med store S og ikke små s.

Metoderne nextLine (), hasNext () og next () er tidligere blevet brugt i denne artikel. Scanneren har andre metoder og andre primitive datametoder - se senere.

Tildeling af input til en variabel

Input kan tildeles en variabel, som følgende kode viser:

importere java.util.Scanner;

offentlig klasseKlassen{
offentlig statisk ugyldigvigtigste( Snor []args) {
Scanner scanningObj= nyScanner( System .i);

System .ud.Print('Indtast navn:');
Snor navn=scanObj.nextLine();

System .ud.Print('Indtast alder:');
intalder=scanObj.næsteInt();

System .ud.Print('Indtast løn:');
dobbeltløn=scanObj.næsteDobbelt();

System .ud.println('Navn:' +navn+ ', Alder:' +alder+ ', Løn:' +løn);

scanObj.tæt();
}
}

Konklusion

Scanneren i Java er en klasse i java.util -pakken. Denne klasse har til formål at læse input fra en streng, tastaturet, filen eller netværksstikket. Denne artikel har hovedsageligt koncentreret sig om at læse input fra tastaturet og vise resultatet i terminalvinduet. Lignende ideer kan bruges til at læse input fra strengen, filen eller netværkskanalen.

For at læse hele linjen med tastaturinput skal du bruge metoden nextLine (). Linjen som en streng kan opdeles i tokens ved hjælp af hasNext () og next () metoderne og while loop. Standardafgrænseren for opdeling er rummet, men programmøren kan vælge en anden afgrænser. Glem ikke at gøre Ctrl+z for at stoppe while loop, hvis det er nødvendigt. Fjernelse af ledende og bageste mellemrum kan udføres ved hjælp af andre ordninger, der ikke er behandlet i denne artikel. Validering af tokens kan også udføres ved hjælp af andre ordninger, der ikke behandles i denne artikel.

Primitive værdier kan læses ved hjælp af nextBoolean (), nextByte (), nextInt () osv. Disse nextXXX () -metoder udfører validering og fjerner også ledende og efterfølgende mellemrum.

Java -scanneren har mange flere metoder. Den grundlæggende brug af scanneren er imidlertid blevet forklaret i denne artikel. Valget af et token sker faktisk ved hjælp af regulære udtrykksteknikker. Brugen af ​​regulære udtrykksteknikker er diskussion, for en anden gang.