Java szkenner

1. A. Áttekintése Scanner

Ebben a gyors bemutatóban bemutatjuk, hogyan kell használni a Jáva Scanner osztály - a bemenet olvasása, a minták megkeresése és kihagyása különböző elválasztókkal.

2. Olvasson be egy fájlt

Először - nézzük meg, hogyan kell egy fájlt olvasni Scanner.

A következő példában - olvastunk egy fájlt, amely a következőt tartalmazza:Helló VilágZsetonokba:

@Test public void whenReadFileWithScanner_thenCorrect () dobja az IOException {Scanner scanner = new Scanner (new File ("test.txt")); assertTrue (szkenner.hasNext ()); assertEquals ("Hello", scanner.next ()); assertEquals ("világ", scanner.next ()); scanner.close (); }

Vegye figyelembe, hogy a következő() metódus adja vissza a következőt Húr token itt.

Vegye figyelembe azt is, hogyan zárjuk le a szkennert, amikor befejeztük a használatát.

3. Konvertálás InputStream nak nek Húr

Következő - nézzük meg, hogyan lehet átalakítani egy InputStream ba be Húr használva Scanner:

@Test public void, amikor a ConConvertInputStreamToString_thenConverted () dobja az IOException-t {String várhatóValue = "Helló világ"; FileInputStream inputStream = új FileInputStream ("test.txt"); Szkenner szkenner = új szkenner (inputStream); scanner.useDelimiter ("A"); Karakterlánc eredménye = scanner.next (); assertEquals (várható érték, eredmény); scanner.close (); }

Az előző példához hasonlóan a Scanner a teljes adatfolyam kezdettől a következő „A” regexig kódolásáig - amely megegyezik a teljes bemenettel.

4. Scanner vs. BufferedReader

Most - beszéljük meg a különbséget Scanner és BufferedReader - általában a következőket használjuk:

  • BufferedReader amikor el akarjuk olvasni a bemenetet vonalakká
  • Scanner hogy olvassa el a bemenetet zsetonokká

A következő példában - egy fájlt sorokba olvasunk a BufferedReader:

@Test public void whenReadUsingBufferedReader_thenCorrect () dobja az IOException-t {String firstLine = "Hello world"; String secondLine = "Szia, John"; BufferedReader olvasó = new BufferedReader (új FileReader ("test.txt")); Karakterlánc eredménye = olvasó.readLine (); assertEquals (firstLine, eredmény); eredmény = olvasó.readLine (); assertEquals (secondLine, eredmény); olvasó.zárja (); }

Most használjuk Scanner hogy ugyanazt a fájlt tokenekké olvassa:

@Test public void, amikorReadUsingScanner_thenCorrect () dobja az IOException-t {String firstLine = "Hello world"; FileInputStream inputStream = új FileInputStream ("test.txt"); Szkenner szkenner = új szkenner (inputStream); Karakterlánc eredménye = scanner.nextLine (); assertEquals (firstLine, eredmény); scanner.useDelimiter (","); assertEquals ("Szia", ​​scanner.next ()); assertEquals ("John", scanner.next ()); scanner.close (); }

Vegye figyelembe, hogyan használjuk a ScannernextLine () API - hogy elolvassa az egész sort.

5. A bemenet beolvasása a konzolról Új szkenner (System.in)

Ezután - nézzük meg, hogyan olvasható le a konzol bemenete a segítségével Scanner példa:

@Test public void whenReadingInputFromConsole_thenCorrect () {String input = "Hello"; InputStream stdin = System.in; System.setIn (új ByteArrayInputStream (input.getBytes ())); Szkenner szkenner = új szkenner (System.in); Karakterlánc eredménye = scanner.next (); assertEquals (input, eredmény); System.setIn (stdin); scanner.close (); }

Vegye figyelembe, hogy használtuk System.setIn (…) hogy szimuláljon néhány konzolból érkező bemenetet.

5.1. nextLine () API

Ez a módszer egyszerűen visszaadja a karakterláncot az aktuális sorban:

szkenner.nextLine ();

Ez beolvassa az aktuális sor tartalmát, és visszaadja azt, kivéve a végén lévő új sorelválasztókat - ebben az esetben - az új sort.

A tartalom elolvasása után Scanner pozícióját a következő sor elejére állítja. Fontos megjegyezni, hogy a nextLine () Az API elfogyasztja a vonalelválasztót és áthelyezi a Scanner a következő sorra.

Tehát a következő alkalommal, ha végigolvassuk Scanner a következő sor elejétől fogjuk olvasni.

5.2. nextInt () API

Ez a módszer a bemenet következő tokenjét anként vizsgálja int:

szkenner.nextInt ();

Az API beolvassa a legközelebb elérhető egész jelet.

Ebben az esetben, ha a következő token egy egész szám, és az egész után van egy sor elválasztó, mindig emlékezzen arra, hogy nextInt () nem fogja felemészteni a vonalelválasztót. Ehelyett a szkenner helyzete maga a vonalelválasztó lesz.

Tehát, ha van egy sor műveletünk, ahol az első művelet a scanner.nextInt () és akkor scanner.nextLine () és bemenetként, ha megadunk egy egész számot és megnyomjuk a sortörést, mindkét művelet végrehajtásra kerül.

A nextInt () Az API az egész számot és a nextLine () Az API elfogyasztja a sorelválasztót és elhelyezi Scanner a következő sor elejére.

6. Ellenőrizze a bemenetet

Most - nézzük meg, hogyan lehet a bevitelt érvényesíteni a használatával Scanner. A következő példában - a Scanner módszer hasNextInt () annak ellenőrzése, hogy a bemenet egész szám-e:

@Test public void whenValidateInputUsingScanner_thenValidated () dob IOException {String input = "2000"; InputStream stdin = System.in; System.setIn (új ByteArrayInputStream (input.getBytes ())); Szkenner szkenner = új szkenner (System.in); logikai isIntInput = szkenner.hasNextInt (); assertTrue (isIntInput); System.setIn (stdin); scanner.close (); }

7. Szkennelés a Húr

Következő - nézzük meg, hogyan lehet beolvasni a Húr felhasználásával Scanner:

@Test public void whenScanString_thenCorrect () IOException dobja {String input = "Hello 1 F 3.5"; Szkenner szkenner = új szkenner (bemenet); assertEquals ("Hello", scanner.next ()); assertEquals (1, szkenner.nextInt ()); assertEquals (15, scanner.nextInt (16)); assertEquals (3.5, szkenner.nextDouble (), 0,00000001); scanner.close (); }

Megjegyzés: A módszer nextInt (16) a következő tokent hexadecimális egész számként olvassa fel.

8. Keresse meg Minta

Most - nézzük meg, hogyan lehet megtalálni a Minta felhasználásával Scanner.

A következő példában - használjuk findInLine () nak nek keressen egy tokent, amely megfelel a megadottnak Minta a teljes bemenetben:

@Test public void whenFindPatternUsingScanner_thenFound () IOException dobja {String várható érték = "világ"; FileInputStream inputStream = új FileInputStream ("test.txt"); Szkenner szkenner = új szkenner (inputStream); Karakterlánc eredménye = scanner.findInLine ("jaj..d"); assertEquals (várható érték, eredmény); scanner.close (); }

Kereshetünk a Minta az adott tartományban a findWithinHorizon () mint a következő példában:

@Test public void whenFindPatternInHorizon_thenFound () IOException dobja {String várható érték = "világ"; FileInputStream inputStream = új FileInputStream ("test.txt"); Szkenner szkenner = új szkenner (inputStream); Karakterlánc eredménye = scanner.findWithinHorizon ("wo..d", 5); assertNull (eredmény); eredmény = scanner.findWithinHorizon ("jaj", 100); assertEquals (várható érték, eredmény); scanner.close (); }

Vegye figyelembe, hogy a keresési horizont egyszerűen a karakterek száma amelyen belül a keresést végrehajtják.

9. Ugrás Minta

Következő - nézzük meg, hogyan lehet kihagyni a Minta ban ben Scanner. Kihagyhatunk egy adott mintának megfelelő tokent, miközben a bemenetet olvasjuk Scanner.

A következő példában - kihagyjuk aHelló”Token a Scanner módszer kihagy ():

@Test public void whenSkipPatternUsingScanner_thenSkipped () IOException-t dob ​​{FileInputStream inputStream = new FileInputStream ("test.txt"); Szkenner szkenner = új szkenner (inputStream); scanner.skip (". e.lo"); assertEquals ("világ", scanner.next ()); scanner.close (); }

10. Változás Scanner Határoló

Végül - nézzük meg, hogyan lehet megváltoztatni a Scanner határoló. A következő példában - megváltoztatjuk az alapértelmezett értéket Scanner határoló „o“:

@Test public void, amikor aChangeScannerDelimiter_thenChanged () dobja az IOException {String várható értéket = "Hello világ"; Karakterlánc [] osztva = várhatóValue.split ("o"); FileInputStream inputStream = új FileInputStream ("test.txt"); Szkenner szkenner = új szkenner (inputStream); scanner.useDelimiter ("o"); assertEquals (osztott [0], szkenner.következő ()); assertEquals (osztott [1], szkenner.következő ()); assertEquals (osztott [2], szkenner.következő ()); scanner.close (); }

Több elválasztót is használhatunk. A következő példában - mindkét vesszőt használjuk,És kötőjel ””, Mivel a fájl beolvasásához elválasztóként aJohn, Adam-Tom“:

@Test public void whenReadWithScannerTwoDelimiters_thenCorrect () IOException - ") dob; assertEquals (" John ", scanner.next ()); assertEquals (" Adam ", scanner.next ()); assertEquals (" Tom ", scanner.next () szkenner.close (); 

Megjegyzés: A alapértelmezett Scanner határoló a szóköz.

11. Következtetés

Ebben az oktatóanyagban több valós példát is áttekintettünk a Java szkenner.

Megtanultuk, hogyan kell olvasni a bemenetet fájlból, konzolról vagy Húr felhasználásával Scanner; azt is megtanultuk, hogyan lehet egy mintát megtalálni és kihagyni Scanner -, valamint hogyan lehet megváltoztatni a Scanner határoló.

Ezeknek a példáknak a megvalósítása megtalálható a GitHub oldalon.