Skener Java

1. Prehľad Skener

V tomto rýchlom návode si ukážeme, ako používať Java Skener trieda - na čítanie vstupu, hľadanie a preskakovanie vzorov s rôznymi oddeľovačmi.

2. Naskenujte súbor

Najprv - pozrime sa, ako čítať súbor pomocou Skener.

V nasledujúcom príklade - čítame súbor obsahujúci „Ahoj svet”Do žetónov:

@ Test public void whenReadFileWithScanner_thenCorrect () hodí IOException {Scanner scanner = new Scanner (new File ("test.txt")); assertTrue (scanner.hasNext ()); assertEquals ("Dobrý deň", scanner.next ()); assertEquals ("svet", scanner.next ()); scanner.close (); }

Všimnite si, že Ďalšie() metóda vráti ďalšiu String token tu.

Všimnite si tiež, ako zavrieme skener, keď ho skončíme.

3. Konvertovať InputStream do String

Ďalej - pozrime sa, ako previesť súbor InputStream do a String pomocou a Skener:

@Test public void whenConvertInputStreamToString_thenConverted () vyvolá IOException {String expectValue = "Hello world"; FileInputStream inputStream = nový FileInputStream ("test.txt"); Skener skener = nový skener (inputStream); scanner.useDelimiter ("A"); Výsledok reťazca = scanner.next (); assertEquals (expectValue, result); scanner.close (); }

Podobne ako v predchádzajúcom príklade sme použili Skener tokenizovať celý stream od začiatku do nasledujúceho regulárneho výrazu „A“ - ktorý zodpovedá úplnému vstupu.

4. Skener vs. BufferedReader

Teraz - poďme diskutovať o rozdiele medzi Skener a BufferedReader - všeobecne používame:

  • BufferedReader keď chceme čítať vstup do riadkov
  • Skener prečítať vstup do žetónov

V nasledujúcom príklade - načítame súbor do riadkov pomocou BufferedReader:

@Test public void whenReadUsingBufferedReader_thenCorrect () vyvolá IOException {String firstLine = "Hello world"; Reťazec secondLine = "Ahoj, John"; Čítačka BufferedReader = nový BufferedReader (nový FileReader ("test.txt")); Výsledok reťazca = reader.readLine (); assertEquals (firstLine, result); výsledok = reader.readLine (); assertEquals (secondLine, result); reader.close (); }

Teraz poďme Skener načítať ten istý súbor do tokenov:

@ Test public void whenReadUsingScanner_thenCorrect () vyvolá IOException {String firstLine = "Hello world"; FileInputStream inputStream = nový FileInputStream ("test.txt"); Skener skener = nový skener (inputStream); Výsledok reťazca = scanner.nextLine (); assertEquals (firstLine, result); scanner.useDelimiter (","); assertEquals ("Ahoj", scanner.next ()); assertEquals ("John", scanner.next ()); scanner.close (); }

Všimnite si, ako používame SkenernextLine () API - prečítať celý riadok.

5. Skenovanie vstupu z konzoly pomocou Nový skener (System.in)

Ďalej - pozrime sa, ako čítať vstup z konzoly pomocou a Skener inštancia:

@Test public void whenReadingInputFromConsole_thenCorrect () {String input = "Hello"; InputStream stdin = System.in; System.setIn (nový ByteArrayInputStream (input.getBytes ())); Skener skener = nový skener (System.in); Výsledok reťazca = scanner.next (); assertEquals (vstup, výsledok); System.setIn (stdin); scanner.close (); }

Všimnite si, že sme použili System.setIn (…) simulovať vstup z konzoly.

5.1. nextLine () API

Táto metóda jednoducho vráti reťazec na aktuálnom riadku:

scanner.nextLine ();

Týmto sa načíta obsah aktuálneho riadku a vráti sa s výnimkou oddeľovača riadkov na konci - v tomto prípade - znaku nového riadku.

Po prečítaní obsahu Skener nastaví svoju pozíciu na začiatok nasledujúceho riadku. Je potrebné pamätať na to, že: nextLine () API spotrebuje oddeľovač riadkov a posúva pozíciu Skener na ďalší riadok.

Takže nabudúce, ak si prečítame celý text Skener budeme čítať od začiatku nasledujúceho riadku.

5.2. nextInt () API

Táto metóda skenuje nasledujúci token vstupu ako int:

scanner.nextInt ();

API načíta celočíselný token, ktorý je k dispozícii ďalej.

V takom prípade, ak je nasledujúcim tokenom celé číslo a za celým číslom je oddeľovač riadkov, nezabudnite vždy na to nextInt () nebude spotrebovávať oddeľovač riadkov. Namiesto toho bude pozíciou skenera samotný oddeľovač riadkov.

Takže ak máme sériu operácií, kde prvá operácia je a scanner.nextInt () a potom scanner.nextLine () a ako vstup, ak poskytneme celé číslo a stlačíme koniec riadku, sa vykonajú obidve operácie.

The nextInt () API bude spotrebovávať celé číslo a nextLine () API spotrebuje oddeľovač riadkov a umiestni sa Skener na začiatok nasledujúceho riadku.

6. Overte vstup

Teraz - pozrime sa, ako overiť vstup pomocou a Skener. V nasledujúcom príklade - používame Skener metóda hasNextInt () skontrolovať, či je vstup celočíselná hodnota:

@ Test public void whenValidateInputUsingScanner_thenValidated () vyvolá IOException {String input = "2000"; InputStream stdin = System.in; System.setIn (nový ByteArrayInputStream (input.getBytes ())); Skener skener = nový skener (System.in); boolean isIntInput = scanner.hasNextInt (); assertTrue (isIntInput); System.setIn (stdin); scanner.close (); }

7. Naskenujte a String

Ďalej - pozrime sa, ako naskenovať a String použitím Skener:

@ Test public void whenScanString_thenCorrect () vyvolá IOException {String input = "Hello 1 F 3.5"; Skener skener = nový skener (vstup); assertEquals ("Dobrý deň", scanner.next ()); assertEquals (1, scanner.nextInt ()); assertEquals (15, scanner.nextInt (16)); assertEquals (3.5, scanner.nextDouble (), 0,00000001); scanner.close (); }

Poznámka: Metóda nextInt (16) načíta nasledujúci token ako hexadecimálnu celočíselnú hodnotu.

8. Nájdi Vzor

Teraz - pozrime sa, ako nájsť a Vzor použitím Skener.

V nasledujúcom príklade - používame findInLine () do vyhľadajte token, ktorý sa zhoduje s daným Vzor v celom vstupe:

@Test public void whenFindPatternUsingScanner_thenFound () hodí IOException {String expectValue = "world"; FileInputStream inputStream = nový FileInputStream ("test.txt"); Skener skener = nový skener (inputStream); Výsledok reťazca = scanner.findInLine ("wo..d"); assertEquals (expectValue, result); scanner.close (); }

Môžeme tiež vyhľadať a Vzor v konkrétnej doméne pomocou findWithinHorizon () ako v nasledujúcom príklade:

@Test public void whenFindPatternInHorizon_thenFound () hodí IOException {String expectValue = "world"; FileInputStream inputStream = nový FileInputStream ("test.txt"); Skener skener = nový skener (inputStream); Výsledok reťazca = scanner.findWithinHorizon ("wo..d", 5); assertNull (výsledok); result = scanner.findWithinHorizon ("wo..d", 100); assertEquals (expectValue, result); scanner.close (); }

Všimnite si, že horizont hľadania je jednoducho počet znakov v rámci ktorého sa vyhľadáva.

9. Preskočiť Vzor

Ďalej - pozrime sa, ako preskočiť a Vzor v Skener. Počas čítania vstupu pomocou môžeme preskočiť tokeny, ktoré zodpovedajú konkrétnemu vzoru Skener.

V nasledujúcom príklade - preskočíme „Ahoj”Token pomocou Skener metóda preskočiť ():

@ Test public void whenSkipPatternUsingScanner_thenSkipped () vyvolá IOException {FileInputStream inputStream = nový FileInputStream ("test.txt"); Skener skener = nový skener (inputStream); scanner.skip (". e.lo"); assertEquals ("svet", scanner.next ()); scanner.close (); }

10. Zmena Skener Oddeľovač

Nakoniec - pozrime sa, ako zmeniť Skener oddeľovač. V nasledujúcom príklade - zmeníme predvolené nastavenie Skener oddeľovač na „o“:

@Test public void whenChangeScannerDelimiter_thenChanged () hodí IOException {String expectValue = "Hello world"; Reťazec [] splited = expectValue.split ("o"); FileInputStream inputStream = nový FileInputStream ("test.txt"); Skener skener = nový skener (inputStream); scanner.useDelimiter ("o"); assertEquals (rozdelené [0], scanner.next ()); assertEquals (rozdelené [1], scanner.next ()); assertEquals (rozdelené [2], scanner.next ()); scanner.close (); }

Môžeme tiež použiť viac oddeľovačov. V nasledujúcom príklade používame obe čiarky “,„A pomlčka“„Keďže oddeľovače na skenovanie súboru obsahujú„Ján, Adam-Tom“:

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

Poznámka: predvolené Skener oddeľovač sú medzery.

11. Záver

V tomto tutoriáli sme si prešli niekoľko príkladov použitia Skener Java.

Naučili sme sa, ako čítať vstup zo súboru, konzoly alebo String použitím Skener; tiež sme sa naučili, ako nájsť a preskočiť vzor pomocou Skener - a tiež ako zmeniť Skener oddeľovač.

Implementáciu týchto príkladov možno nájsť na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found