CodeGym /Java blog /Véletlen /Java szkenner osztály
John Squirrels
Szint
San Francisco

Java szkenner osztály

Megjelent a csoportban
Szia! Mai óránk különleges lesz! A mai leckében a Java Scanner Class-ról fogunk beszélni. Korábban a feladatok végrehajtása és a programok írása egyszerű volt: írunk egy kódot, lefuttatjuk a main()módszerrel a program megteszi, amit kell, és készen is vagyunk. De most minden megváltozik! Ma megtanuljuk, hogyan kell valóban kölcsönhatásba lépni a programmal: megtanítjuk, hogyan reagáljon cselekedeteinkre! Mielőtt elkezdenénk elemezni a kódot, volt már olyan eszközzel, mint egy szkenner? Valószínűleg. A szkenner belseje meglehetősen bonyolult, de működésének alapötlete nagyon egyszerű: beolvassa a felhasználó által megadott adatokat (például útlevelet vagy biztosítást), és ezeket az információkat a memóriában tárolja (például képként). ). Ma elkészíti saját szkennerét! Papír dokumentumokat persze nem fog tudni kezelni, de a szöveg nem lesz gond számára :) Hajrá!

Java szkenner osztály

Szkenner osztály - 1Mindenekelőtt a java.util.Scanner osztályt kell megismernünk . Funkciója nagyon egyszerű. Egy valódi szkennerhez hasonlóan az Ön által megadott forrásból olvas adatokat. Például egy karakterlánc, egy fájl, a konzol. Ezután felismeri az információt, és megfelelően feldolgozza. Íme a legegyszerűbb példa:

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
Létrehoztunk egy szkennerobjektumot, és megadtuk annak adatforrását (szövegsor). A nextLine() metódus hozzáfér az adatforráshoz (négysoros szövegünkhöz), megkeresi a következő olvasatlan sort (ami jelen esetben az első sor), és visszaadja azt. Ezután megjelenítjük a konzolon: Konzol kimenet:

It matters not how strait the gate,
Többször is használhatjuk a nextLine() metódust, és megjeleníthetjük a teljes versrészletet:

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
   }
}
Szkennerünk minden alkalommal egy lépést tesz előre, és beolvassa a következő sort. Megjelenik a program kimenete:

It matters not how strait the gate, 
How charged with punishments the scroll, 
I am the master of my fate, 
I am the captain of my soul
Ahogy már említettük, a szkenner adatforrásának nem kell karakterláncnak lennie. Például ez lehet a konzol. Néhány izgalmas hír számodra: korábban csak adatokat jelenítettünk meg ott, most viszont a billentyűzetről olvasunk adatokat! Lássuk, mit csinál még a Scanner osztály:

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
A nextInt() metódus beolvassa és visszaadja a beírt számot. Programunkban azt használjuk, hogy értéket rendeljünk a szám változóhoz . Ez már inkább egy igazi szkenner! A program megkéri a felhasználót, hogy adjon meg bármilyen számot. Miután a felhasználó ezt megtette, a program köszönetet mond a felhasználónak, megjeleníti az eredményt, és befejezi. De még mindig komoly problémánk van. Előfordulhat, hogy a felhasználó hibázik, és valamit rosszul ír be. Íme egy példa, amikor a jelenlegi programunk leáll:

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
Próbáljuk meg beírni a „CodeGym” karakterláncot egy szám helyett: Konzol kimenet:

Enter a number: 
CodeGym 
Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:864) 
at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextInt(Scanner.java:2117) 
at java.util.Scanner.nextInt(Scanner.java:2076) 
at Main.main(Main.java:10) Process finished with exit code 1
UH Oh. Nagy bajban vagyunk -_- Az ilyen helyzetek elkerülése érdekében ki kell találnunk egy módot a felhasználó által bevitt adatok ellenőrzésére. Például, ha a felhasználó számon kívül bármi mást ír be, jó lenne egy figyelmeztetést megjeleníteni, hogy a megadott információ nem szám. És ha az információ rendben van, akkor megerősíthetjük. Ehhez azonban „a jövőbe kell néznünk”, hogy lássuk, mi jön a folyamunkban. A Scanner képes erre? És hogyan! És számos módszerrel rendelkezik erre: hasNextInt() – Ez a metódus azt ellenőrzi, hogy a következő bemeneti adatok egy szám-e (igaz vagy hamis értéket ad vissza, ha szükséges). hasNextLine() – Ez a metódus azt ellenőrzi, hogy a következő bemeneti rész karakterlánc-e. hasNextByte() ,hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() – Mindezek a metódusok hasonló ellenőrzéseket hajtanak végre a fennmaradó adattípusoknál. Próbáljuk meg megváltoztatni a számolvasó programunkat:

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thanks! You entered the number " + number);
       } else {
           System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
       }

   }
}
Most a programunk ellenőrzi, hogy a következő beírt karakter szám-e. És csak akkor jelenít meg megerősítést, ha igen. Ha a bemenet nem megy át az ellenőrzésen, a program tudomásul veszi, és felkéri a felhasználót, hogy próbálkozzon újra. Alapvetően kommunikálhat a Scanner objektummal, és előre megtudhatja, milyen adattípus várja Önt. Szám, karakterlánc vagy valami más? Egy szám? És milyen? Egy int , short , long ?" Ez a rugalmasság lehetőséget ad arra, hogy a felhasználó viselkedésétől függő programlogikát építs fel. Érdemes megjegyeznünk egy másik fontos metódust is: useDelimiter() . Ennek a metódusnak egy karakterláncot adsz át. A karakterlánc tartalmazza a elválasztóként vagy határolóként használni kívánt karaktereket. Tegyük fel például, hogy hirtelen elkezdett érdeklődni a japán költészet iránt, és úgy döntöttünk, hogy a szkennerünkkel elolvasunk néhány haiku-t, amelyet a nagy költő, Matsuo Bashō írt. Még ha három különböző verssort egy kínos füzérként adnak át nekünk, könnyen szétválaszthatjuk és gyönyörűen visszaadhatjuk őket:

public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a withered branch'" +
               "A crow has alighted.'" +
               "Nightfall in autumn." +
               "''***''" +
               "Such a moon above,'" +
               "Like a tree cut at the root:'" +
               "he fresh cut is white." +
               "''***''" +
               "How the river floods!'" +
               "A heron wanders on short legs,'" +
               "Knee-deep in the water.");

       scan.useDelimiter("'");

       while (scan.hasNext()) {
           System.out.println(scan.next());
       }

       scan.close();
   }
}
Határolóként a "\ n /*/*/*" karaktert (új sorkarakter és három csillag) használjuk . Ennek eredményeként gyönyörű konzolkimenettel rendelkezünk, akárcsak a könyvekben:
On a withered branch 
A crow has alighted. 
Nightfall in autumn. 

*** 

Such a moon above, 
Like a tree cut at the root: 
The fresh cut is white. 

*** 

How the river floods! 
A heron wanders on short legs, 
Knee-deep in the water.
Ebben a példában van még egy metódus, amire feltétlenül rá kell mutatnunk: close() . Mint minden I/O adatfolyamot használó objektumot, a szkennert is be kell zárni, amikor ez elkészült, hogy ne használja fel a számítógép erőforrásait. Soha ne felejtsd el a close() metódust!

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);
      
       sc.close(); // Now we've done everything right!

   }
}
Ez az! Amint látja, a Szkenner osztály használata nagyon egyszerű! :) A tanultak megerősítése érdekében javasoljuk, hogy nézzen meg egy videóleckét a Java-tanfolyamról

További olvasnivalók:

Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION