Kuidas skannerit Java -s kasutada

How Use Scanner Java



Java skanner on java.util paketi klass. Selle klassi eesmärk on lugeda sisendit stringist, klaviatuurilt, failist või võrgupesast. See artikkel keskendub ainult klaviatuurilt sisendi lugemisele ja tulemuse kuvamisele terminaliaknas. Sarnaseid ideid saab kasutada failist või võrgukanalist sisendi lugemiseks. Skanner ei prindi terminaliaknasse. Terminali printimiseks kasutage objekti System.out. Selle objekti kasutamine terminali printimiseks on lihtne, nagu allpool näidatud.

Skanneri klassi kasutamiseks tuleb see kõigepealt importida. Pärast seda tuleb objekt esmalt sellest esile kutsuda. Pärast skanneriobjekti kasutamist tuleb see sulgeda. Klaviatuuri kujutav sisendvoo objekt on System.in. Skanneril on palju meetodeid. Selles artiklis selgitatakse ainult kõige sagedamini kasutatavaid.





Artikli sisu



Skanneriklassi lihtne kasutamine

Järgmine kood palub kasutajal sisestada lause ja kuvab seejärel lause:



import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Skanner scanObj= uusSkanner( Süsteem .sisse);
Süsteem .välja.println('Tippige lause ja vajutage sisestusklahvi:');

String lause=scanObj.nextLine();
Süsteem .välja.println(lause);

scanObj.Sulge();
}
}

Esimene rida impordib klassi Scanner. Põhifunktsioonis loob esimene rida skanneriobjekti, kasutades klaviatuuri objekti System.in. Niipea kui skanneriobjekt on loodud, hakkab see sisendit ootama. Järgmine rida prindib avalduse, paludes kasutajal sisestada lause. Koodile järgnev rida kasutab skanneriobjekti meetodit nextLine (), et lugeda kasutaja lause pärast sisestusklahvi sisestamist. Koodis olev rida prindib lause terminaliaknas uuesti. Viimane rida sulgeb skanneri objekti.





Sisestusjoone väärtusteks sülitamine

Järgmine kood jagab sisendrea sõnadeks (märgid), kasutades eraldajana tühikut:

import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Skanner scanObj= uusSkanner( Süsteem .sisse);
Süsteem .välja.println('Sisestage rida märke ja vajutage sisestusklahvi:');

samas(scanObj.hasNext()){
Süsteem .välja.println(scanObj.järgmine());
}

scanObj.Sulge();
}
}

hasNext () ja next () on kaks muud skanneriobjekti meetodit. Kui skanneri objekt loeb rida, hoiab see selle alles. next () avab järgmise märgi (sõna). hasNext () tagastab tõese, kui on veel mõni märk, millele pole veel juurde pääsetud.



Kahjuks oodatakse, et kasutaja sisestaks selle koodiga jagamiseks ja uuesti kuvamiseks sisendi. Selle lõpetamiseks vajutage klahvikombinatsiooni Ctrl+z ja peaksite käsureale tagasi jõudma.

Ülaltoodud koodis eraldab eraldaja ruumis märgid. Võib kasutada teist märki. Järgmine kood kasutab koma. Koodi testimisel ärge unustage silmuse lõpetamiseks vajutada Ctrl+z.

import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Skanner scanObj= uusSkanner( Süsteem .sisse);
Süsteem .välja.println('Sisestage rida märke ja vajutage sisestusklahvi:');

scanObj.useDelimiter(',');

samas(scanObj.hasNext()){
Süsteem .välja.println(scanObj.järgmine());
}

scanObj.Sulge();
}
}

Kui prooviksite koodi, oleksite märganud, et žetoonide tühikud on lisatud žetoonide hulka (väljund). Väljend, scanObj.useDelimiter (,); pärast sisendrea lugemist; see teeb koma, eraldaja.

Primitiivsete andmetüüpide lugemine ja valideerimine

nextBoolean () meetod

Järgmises koodis peaks kasutaja ilma jutumärkideta sisestama tõese või vale ja seejärel vajutama sisestusklahvi, kui kasutaja kirjutab midagi muud, näiteks jah või ei, kuvatakse veateade.

import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Süsteem .välja.printida('Kas sa oled üle 24? ');
Skanner scanObj= uusSkanner( Süsteem .sisse);

loogilinebl=scanObj.nextBoolean();
kui (bl== tõsi) {
Süsteem .välja.println('Sa oled üle 24');
}
muidu kui (bl== vale) {
Süsteem .välja.println('Sa oled alla 24');
}

scanObj.Sulge();
}
}

Kuna java väljastab veateate seni, kuni sisend ei ole tõene või vale, siis muud kui on kasutatud muidu.

Erinevus meetodite printimise ja println vahel seisneb selles, et print ootab sisendit praegusel real, println aga sisendit järgmisel real.

nextByte () meetod

ASCII märgikomplekti korral on märk üks bait. Mõne idamaise tähemärkide puhul võib märk koosneda aga rohkem kui ühest baidist. Sõltumata märgikomplektist loeb ja valideerib nextByte sisendi järgmise baidi. Sel eesmärgil saab kasutada järgmist koodi:

import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Süsteem .välja.printida('Tüübi number<128, press Enter: ');
Skanner scanObj= uusSkanner( Süsteem .sisse);

baitbt=scanObj.nextByte();
Süsteem .välja.println(bt);

scanObj.Sulge();
}
}

Kui selle koodi jaoks sisestatakse arv, mis on suurem kui 127 või tähestiku tähis, väljastatakse veateade.

nextInt () meetod

Järgmist täisarvulist märki sisendina saab samuti kinnitada ja aktsepteerida. Kasutada saab järgmist koodi:

import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Süsteem .välja.printida('Sisestage täisarv:');
Skanner scanObj= uusSkanner( Süsteem .sisse);

intühe peale=scanObj.järgmineInt();
Süsteem .välja.println(ühe peale);

scanObj.Sulge();
}
}

Juht- või lõppruumid on eemaldatud. Selle koodi puhul aktsepteeritakse kõiki täisarvulisi väärtusi, sealhulgas väärtusi, mis on suuremad kui 127. Nende järgmisteXXX () meetodite korral väljastatakse pärast valideerimise ebaõnnestumist veateade.

nextBigInteger () meetod

Tundub, et tarkvarainsenerid ei lõpeta kunagi uute asjade väljamõtlemist. Suur täisarv on täisarv, mille väärtus on palju suurem kui täisarv. Javaga saab seda aga lugeda samamoodi nagu täisarvu. Seda illustreerib järgmine kood:

import java.util.Skanner;
import java.math.BigInteger;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Süsteem .välja.println('Suure täisarvu jaoks sisestage ükskõik milline täisarv:');
Skanner scanObj= uusSkanner( Süsteem .sisse);

BigInteger ühe peale=scanObj.nextBigInteger();
Süsteem .välja.println(ühe peale);

scanObj.Sulge();
}
}

Pange tähele impordiavaldust, import java.math.BigInteger ;. Pange tähele, et suurt täisarvu tüüpi alustatakse suurtähega B, mitte väiketähega b.

nextFloat () meetod

Järgmise ujukimärgi sisendina saab samuti kinnitada ja aktsepteerida. Kasutada saab järgmist koodi:

import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Süsteem .välja.printida('Sisestage mis tahes ujuk:');
Skanner scanObj= uusSkanner( Süsteem .sisse);

hõljumaühe peale=scanObj.nextFloat();
Süsteem .välja.println(ühe peale);

scanObj.Sulge();
}
}

Ujukinumbri näide on 23.456. Juht- või lõppruumid on eemaldatud.

nextDouble ()

Järgmist topeltmärki sisendina saab samuti kinnitada ja aktsepteerida. Kasutada saab järgmist koodi:

import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Süsteem .välja.printida('Sisestage mis tahes topelt:');
Skanner scanObj= uusSkanner( Süsteem .sisse);

kahekordneühe peale=scanObj.nextDouble();
Süsteem .välja.println(ühe peale);

scanObj.Sulge();
}
}

Topeltarvu näide on 23.456. Topeltarv erineb ujukist, kuna sellel on vähem veamäära. Juht- või lõppruumid on eemaldatud.

nextLine () meetod

Järgmise rea () meetod on stringi jaoks. Kui string on pärast sisestusklahvi sisestamist klaviatuuri sisestusliin, võib sellel olla uue rea märk „ n”. Kasutada saab järgmist koodi:

import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Süsteem .välja.println('Sisestage rida, millel on\n: ');
Skanner scanObj= uusSkanner( Süsteem .sisse);

String lk=scanObj.nextLine();
Süsteem .välja.println(lk);

scanObj.Sulge();
}
}

Pange tähele, et stringi tüüp algab suurtähega S, mitte väiketähega s.

Meetodeid nextLine (), hasNext () ja next () on selles artiklis varem kasutatud. Skanneril on muid meetodeid ja muid primitiivseid andmestiku meetodeid - vt hiljem.

Sisendi määramine muutujale

Sisendi saab määrata muutujale, nagu näitab järgmine kood:

import java.util.Skanner;

avalik klassiKlass{
avalik staatiline tühinepeamine( String []args) {
Skanner scanObj= uusSkanner( Süsteem .sisse);

Süsteem .välja.printida('Sisestage nimi:');
String nimi=scanObj.nextLine();

Süsteem .välja.printida('Sisestage vanus:');
intvanus=scanObj.järgmineInt();

Süsteem .välja.printida('Sisestage palk:');
kahekordnepalk=scanObj.nextDouble();

Süsteem .välja.println('Nimi:' +nimi+ ', Vanus:' +vanus+ ', Palk:' +palk);

scanObj.Sulge();
}
}

Järeldus

Java skanner on java.util paketi klass. Selle klassi eesmärk on lugeda sisendit stringist, klaviatuurilt, failist või võrgupesast. See artikkel on keskendunud peamiselt klaviatuurilt sisendi lugemisele ja tulemuse kuvamisele terminaliaknas. Sarnaseid ideid saab kasutada stringi, faili või võrgukanali sisendi lugemiseks.

Kogu klaviatuurisisestuse lugemiseks kasutage meetodit nextLine (). Rida stringina saab jagada märkideks, kasutades meetodeid hasNext () ja next () ning loopi. Jagamise vaikimisi eraldaja on tühik, kuid programmeerija saab valida mõne muu eraldaja. Ärge unustage vajadusel ajavahemiku peatamiseks teha klahve Ctrl+z. Ees- ja lõppruumi saab eemaldada muude skeemide abil, mida selles artiklis ei käsitleta. Märkide valideerimist saab teha ka muude selles artiklis käsitlemata skeemide abil.

Primitiivseid väärtusi saab lugeda, kasutades NextBoolean (), nextByte (), nextInt () jne. Need nextXXX () meetodid valideerivad ja eemaldavad ka esi- ja lõppruumid.

Java -skanneril on palju rohkem meetodeid. Selles artiklis on aga selgitatud skanneri põhikasutust. Märgi valimine toimub tegelikult regulaaravaldiste võtete abil. Regulaaravaldiste võtete kasutamine on arutelu, mõnda muud aega.