A Scanner osztály használatához először importálni kell. Ezt követően egy tárgyat kell példányosítani belőle. A Scanner objektum használata után be kell zárni. A billentyűzetet képviselő bemeneti adatfolyam -objektum a System.in. A szkenner számos módszerrel rendelkezik. Ebben a cikkben csak a leggyakrabban használtat ismertetjük.
Cikk tartalma
- A szkenner osztály egyszerű használata
- A bemeneti vonal értékekre köpése
- Primitív adattípusok olvasása és érvényesítése
- Bemeneti token hozzárendelése egy változóhoz
- Következtetés
A szkenner osztály egyszerű használata
A következő kód kéri a felhasználót, hogy írjon be egy mondatot, majd megjeleníti a mondatot:
import java.util.Scanner;
nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Szkenner scanObj= újScanner( Rendszer .ban ben);
Rendszer .ki.println('Írjon be egy mondatot, és nyomja le az Enter billentyűt:');
Húr mondat=scanObj.nextLine();
Rendszer .ki.println(mondat);
scanObj.Bezárás();
}
}
Az első sor a Scanner osztályt importálja. A fő funkcióban az első sor létrehoz egy szkenner objektumot a System.in objektum használatával a billentyűzethez. Amint a szkenner objektum létrejön, elkezd várni a bevitelre. A következő sor kinyomtat egy utasítást, és arra kéri a felhasználót, hogy írjon be egy mondatot. A kódban következő sor a szkenner objektum nextLine () metódusát használja a felhasználó mondatának beolvasására, miután lenyomta az Enter billentyűt. A kód utáni sor újraírja a mondatot a terminál ablakában. Az utolsó sor bezárja a szkenner objektumot.
A bemeneti vonal értékekre köpése
A következő kód szétválasztja a beviteli sort szavakra (tokenekre), a szóközt határolóként használva:
import java.util.Scanner;nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Szkenner scanObj= újScanner( Rendszer .ban ben);
Rendszer .ki.println('Írjon be egy token sort, és nyomja meg az Enter billentyűt:');
míg(scanObj.hasNext()){
Rendszer .ki.println(scanObj.következő());
}
scanObj.Bezárás();
}
}
A hasNext () és a next () a szkennerobjektum két másik módszere. Amikor a szkenner objektum olvas egy sort, megtartja azt. next () a következő tokenhez (szóhoz) fér hozzá. A hasNext () igaz értéket ad vissza, ha van más, még nem használt jogkivonat.
Sajnos a felhasználónak továbbra is be kell írnia a bemenetet a felosztáshoz és a megjelenítéshez ezzel a kóddal. Ennek befejezéséhez nyomja le a Ctrl+z billentyűkombinációt, és vissza kell térnie a parancssorba.
A fenti kódban a határoló elválasztja a tokeneket a térben. Más karakter is használható. A következő kód vesszőt használ. Ne felejtse el megnyomni a Ctrl+z billentyűt a ciklus befejezéséhez, ha teszteli a kódot.
import java.util.Scanner;nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Szkenner scanObj= újScanner( Rendszer .ban ben);
Rendszer .ki.println('Írjon be egy token sort, és nyomja meg az Enter billentyűt:');
scanObj.useDelimiter(',');
míg(scanObj.hasNext()){
Rendszer .ki.println(scanObj.következő());
}
scanObj.Bezárás();
}
}
Ha tesztelte a kódot, észrevette volna, hogy a tokenekben lévő szóközök szerepelnek a tokenek (kimenet) részeként. A kifejezés, scanObj.useDelimiter (,); a beviteli sor elolvasása után gépelni; ez teszi a vesszőt, az elválasztót.
Primitív adattípusok olvasása és érvényesítése
nextBoolean () metódus
A következő kódban a felhasználónak igaz vagy hamis értéket kell beírnia idézőjelek nélkül, majd nyomja meg az Enter billentyűt, ha a felhasználó mást ír be, például igen vagy nem, hibaüzenet jelenik meg.
import java.util.Scanner;nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Rendszer .ki.nyomtatás('24 felett vagy? ');
Szkenner scanObj= újScanner( Rendszer .ban ben);
booleanbl=scanObj.nextBoolean();
ha (bl== igaz) {
Rendszer .ki.println('24 évesnél idősebb');
}
más ha (bl== hamis) {
Rendszer .ki.println('24 év alatti vagy');
}
scanObj.Bezárás();
}
}
Mivel a java hibaüzenetet ad ki mindaddig, amíg a bemenet nem igaz vagy hamis, a else ha a más helyett lett használva.
A különbség a nyomtatás és a println módszerek között az, hogy a print az aktuális sor bemenetét várja, míg a println a következő sor bemenetét.
nextByte () metódus
Az ASCII karakterkészlettel a karakter egy bájtos. Néhány keleti karakterkészletnél azonban egy karakter több bájtból állhat. A karakterkészlettől függetlenül a nextByte metódus beolvassa és érvényesíti a bemenet következő bájtját. Erre a célra a következő kód használható:
import java.util.Scanner;nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Rendszer .ki.nyomtatás('Típusszám<128, press Enter: ');
Szkenner scanObj= újScanner( Rendszer .ban ben);
bytebt=scanObj.nextByte();
Rendszer .ki.println(bt);
scanObj.Bezárás();
}
}
Ha 127 -nél nagyobb számot vagy ábécé karaktert ad meg ehhez a kódhoz, hibaüzenet jelenik meg.
nextInt () módszer
A következő egész szám token bemenetként is érvényesíthető és elfogadható. A következő kód használható:
import java.util.Scanner;nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Rendszer .ki.nyomtatás('Írjon be minden egész számot:');
Szkenner scanObj= újScanner( Rendszer .ban ben);
intaz egyiken=scanObj.nextInt();
Rendszer .ki.println(az egyiken);
scanObj.Bezárás();
}
}
A vezető vagy a záró szóközöket eltávolítottuk. Ennél a kódnál minden egész érték elfogadható, beleértve a 127 -nél nagyobb értékeket is. Ezekkel a következőXXX () metódusokkal az ellenőrzés sikertelensége után hibaüzenet jelenik meg.
nextBigInteger () módszer
Úgy tűnik, hogy a szoftvermérnökök soha nem hagyják abba az új dolgokat. A nagy egész olyan egész szám, amelynek értéke sokkal nagyobb, mint egy egész. A Java -val azonban ugyanúgy olvasható, mint az egész szám. A következő kód ezt szemlélteti:
import java.util.Scanner;import java.math.BigInteger;
nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Rendszer .ki.println('Írjon be minden egész számot a nagy egész számhoz:');
Szkenner scanObj= újScanner( Rendszer .ban ben);
BigInteger az egyiken=scanObj.nextBigInteger();
Rendszer .ki.println(az egyiken);
scanObj.Bezárás();
}
}
Jegyezze meg az import nyilatkozatot, import java.math.BigInteger ;. Ezenkívül vegye figyelembe, hogy a nagy egész típusú B kezdőbetűvel kezdődik, és nem kisbetűvel.
nextFloat () módszer
A következő float token bemenetként is érvényesíthető és elfogadható. A következő kód használható:
import java.util.Scanner;nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Rendszer .ki.nyomtatás('Adja meg bármelyik úszót:');
Szkenner scanObj= újScanner( Rendszer .ban ben);
úszóaz egyiken=scanObj.nextFloat();
Rendszer .ki.println(az egyiken);
scanObj.Bezárás();
}
}
Az úszószámra példa a 23.456. A vezető vagy a záró szóközöket eltávolítottuk.
nextDouble ()
A következő dupla token bemenetként is érvényesíthető és elfogadható. A következő kód használható:
import java.util.Scanner;nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Rendszer .ki.nyomtatás('Írjon be minden duplát:');
Szkenner scanObj= újScanner( Rendszer .ban ben);
kettősaz egyiken=scanObj.nextDouble();
Rendszer .ki.println(az egyiken);
scanObj.Bezárás();
}
}
A kettős számra példa a 23.456. A kettős szám különbözik a lebegéstől, mert kevesebb a hibahatára. A vezető vagy a záró szóközöket eltávolítottuk.
nextLine () metódus
A nextLine () metódus egy karakterláncra vonatkozik. Ha a karakterlánc a billentyűzet beviteli sora az Enter megnyomása után, akkor az új sor karaktere, „ n” lehet. A következő kód használható:
import java.util.Scanner;nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Rendszer .ki.println('Írjon be egy sort\n: ');
Szkenner scanObj= újScanner( Rendszer .ban ben);
Húr o=scanObj.nextLine();
Rendszer .ki.println(o);
scanObj.Bezárás();
}
}
Figyeljük meg, hogy a karakterlánc típusa az S nagybetűvel kezdődik, és nem a kisbetűvel.
A nextLine (), hasNext () és next () metódusokat korábban már használtuk ebben a cikkben. A szkenner más módszerekkel és primitív adatmódszerekkel is rendelkezik - lásd később.
Bemenet hozzárendelése egy változóhoz
A bemenet hozzárendelhető egy változóhoz, amint azt a következő kód mutatja:
import java.util.Scanner;nyilvános osztályOsztály{
nyilvános statikus üresfő-( Húr []args) {
Szkenner scanObj= újScanner( Rendszer .ban ben);
Rendszer .ki.nyomtatás('Írja be a nevét:');
Húr név=scanObj.nextLine();
Rendszer .ki.nyomtatás('Adja meg az életkort:');
intkor=scanObj.nextInt();
Rendszer .ki.nyomtatás('Fizetés megadása:');
kettősfizetés=scanObj.nextDouble();
Rendszer .ki.println('Név:' +név+ ', Kor:' +kor+ ', Fizetés: ' +fizetés);
scanObj.Bezárás();
}
}
Következtetés
A Java szkenner a java.util csomag egyik osztálya. Ennek az osztálynak a célja a bemenet olvasása egy karakterláncból, a billentyűzetből, a fájlból vagy a hálózati aljzatból. Ez a cikk elsősorban a billentyűzetről származó bemenet olvasására és az eredmény megjelenítésére összpontosított a terminál ablakában. Hasonló ötletek használhatók a karakterlánc, fájl vagy hálózati csatorna bemenetének olvasására.
A billentyűzetbemenet teljes sorának elolvasásához használja a nextLine () metódust. A sor mint karakterlánc felosztható tokenekre a hasNext () és a next () metódusok, valamint a while ciklus használatával. A felosztás alapértelmezett határolója a szóköz, de a programozó választhat más elválasztót is. Ne felejtse el a Ctrl+z billentyűkombinációt leállítani a while ciklusban, ha szükséges. A vezető és a záró szóközök eltávolítása történhet más, a cikkben nem szereplő sémákkal. A tokenek érvényesítése más, a cikkben nem tárgyalt sémák használatával is elvégezhető.
A primitív értékek a nextBoolean (), nextByte (), nextInt () stb.
A Java szkenner számos más módszert is tartalmaz. A lapolvasó alapvető használatát azonban ebben a cikkben ismertettük. A token kiválasztása valójában reguláris kifejezési technikákkal történik. A reguláris kifejezési technikák használata vita, máskor.