Jak používat skener v Javě

How Use Scanner Java



Skener v Javě je třída v balíčku java.util. Tato třída má za cíl číst vstup z řetězce, klávesnice, souboru nebo soketu sítě. Tento článek se soustředí pouze na čtení vstupu z klávesnice a zobrazení výsledku v okně terminálu. Podobné nápady lze použít ke čtení vstupu ze souboru nebo síťového kanálu. Skener netiskne do okna terminálu. Chcete -li tisknout na terminál, použijte objekt System.out. Je snadné použít tento objekt k tisku na terminál, jak je znázorněno níže.

Chcete -li použít třídu Scanner, musíte ji nejprve importovat. Poté je z něj třeba vytvořit instanci objektu. Po použití skeneru musí být objekt zavřen. Objekt vstupního proudu, který představuje klávesnici, je System.in. Skener má mnoho metod. V tomto článku budou vysvětleny pouze ty běžně používané.







Obsah článku



Jednoduché použití třídy skeneru

Následující kód požádá uživatele o zadání věty a poté zobrazí větu:



import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Scanner scanObj= NovýSkener( Systém .v);
Systém .ven.println('Napište větu a stiskněte Enter:');

Tětiva věta=scanObj.nextLine();
Systém .ven.println(věta);

scanObj.zavřít();
}
}

První řádek importuje třídu Scanner. V hlavní funkci vytvoří první řádek objekt skeneru pomocí objektu System.in pro klávesnici. Jakmile je objekt skeneru vytvořen, začne čekat na zadání. Další řádek vytiskne příkaz a požádá uživatele, aby zadal větu. Následující řádek v kódu používá metodu nextLine () objektu skeneru ke čtení věty uživatele poté, co stiskne Enter. Řádek poté v kódu znovu vytiskne větu v okně terminálu. Poslední řádek zavře objekt skeneru.





Plivání vstupního řádku na hodnoty

Následující kód rozděluje vstupní řádek na slova (tokeny) pomocí mezery jako oddělovače:

import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Scanner scanObj= NovýSkener( Systém .v);
Systém .ven.println('Zadejte řádek tokenů a stiskněte Enter:');

zatímco(scanObj.hasNext()){
Systém .ven.println(scanObj.další());
}

scanObj.zavřít();
}
}

hasNext () a next () jsou další dvě metody objektu skeneru. Když objekt skeneru přečte řádek, ponechá ho. next () přistupuje k dalšímu tokenu (slovu). hasNext () vrací hodnotu true, pokud ještě není přístupný žádný jiný token.



Bohužel se stále očekává, že uživatel zadá vstup pro rozdělení a opětovné zobrazení s tímto kódem. Chcete -li to všechno ukončit, stiskněte Ctrl+z a měli byste být zpět na příkazovém řádku.

Ve výše uvedeném kódu oddělovač odděluje tokeny v prostoru. Lze použít jinou postavu. Následující kód používá čárku. Pokud testujete kód, nezapomeňte stisknutím Ctrl+z ukončit smyčku.

import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Scanner scanObj= NovýSkener( Systém .v);
Systém .ven.println('Zadejte řádek tokenů a stiskněte Enter:');

scanObj.useDelimiter(',');

zatímco(scanObj.hasNext()){
Systém .ven.println(scanObj.další());
}

scanObj.zavřít();
}
}

Pokud byste testovali kód, všimli byste si, že mezery v tokenech byly zahrnuty jako součást tokenů (výstup). Výraz, scanObj.useDelimiter (,); zadáno po přečtení vstupního řádku; to dělá čárku, oddělovač.

Čtení a ověřování primitivních datových typů

metoda nextBoolean ()

V následujícím kódu se od uživatele očekává, že zadá hodnotu true nebo false bez uvozovek a poté stiskne klávesu Enter, pokud uživatel zadá cokoli jiného, ​​například ano nebo ne, zobrazí se chybová zpráva.

import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Systém .ven.tisk(„Je ti víc než 24? ');
Scanner scanObj= NovýSkener( Systém .v);

booleovskýbl=scanObj.dalšíBoolean();
-li (bl== skutečný) {
Systém .ven.println('Je ti víc než 24');
}
jiný -li (bl== Nepravdivé) {
Systém .ven.println('Je ti méně než 24');
}

scanObj.zavřít();
}
}

Protože java vydá chybovou zprávu, pokud vstup není přesně true nebo false, místo else bylo použito else if.

Rozdíl mezi metodami print a println spočívá v tom, že tisk očekává vstup na aktuálním řádku, zatímco println očekává vstup na dalším řádku.

metoda nextByte ()

U znakové sady ASCII je znak jeden bajt. U některých východních znakových sad však může znak sestávat z více než jednoho bajtu. Metoda nextByte nezávisle na znakové sadě čte a ověřuje další bajt vstupu. K tomuto účelu lze použít následující kód:

import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Systém .ven.tisk('Napište číslo.'<128, press Enter: ');
Scanner scanObj= NovýSkener( Systém .v);

bytebt=scanObj.nextByte();
Systém .ven.println(bt);

scanObj.zavřít();
}
}

Pokud je pro tento kód zadáno číslo větší než 127 nebo znak abecedy, vydá se chybová zpráva.

metoda nextInt ()

Následující celočíselný token jako vstup lze také ověřit a přijmout. Lze použít následující kód:

import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Systém .ven.tisk('Zadejte libovolné celé číslo:');
Scanner scanObj= NovýSkener( Systém .v);

intna jednom=scanObj.nextInt();
Systém .ven.println(na jednom);

scanObj.zavřít();
}
}

Přední nebo zadní mezery byly odstraněny. Pro tento kód by byla přijata jakákoli celočíselná hodnota, včetně hodnot větších než 127. U těchto metod nextXXX () se po selhání ověření zobrazí chybová zpráva.

metoda nextBigInteger ()

Zdá se, že softwaroví inženýři nikdy nepřestanou přicházet s novými věcmi. Velké celé číslo je celé číslo, jehož hodnota je mnohem větší než celé číslo. V Javě jej však lze číst stejným způsobem jako celé číslo. Následující kód to ilustruje:

import java.util.Scanner;
import java.math.BigInteger;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Systém .ven.println('Zadejte libovolné celé číslo pro velké celé číslo:');
Scanner scanObj= NovýSkener( Systém .v);

BigInteger na jednom=scanObj.nextBigInteger();
Systém .ven.println(na jednom);

scanObj.zavřít();
}
}

Všimněte si příkazu import, import java.math.BigInteger ;. Všimněte si také, že typ velkého celého čísla začíná velkými písmeny B a nikoli malými b.

metoda nextFloat ()

Následující token float jako vstup lze také ověřit a přijmout. Lze použít následující kód:

import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Systém .ven.tisk('Zadejte libovolný plovák:');
Scanner scanObj= NovýSkener( Systém .v);

plovákna jednom=scanObj.nextFloat();
Systém .ven.println(na jednom);

scanObj.zavřít();
}
}

Příklad float number je 23.456. Přední nebo zadní mezery byly odstraněny.

dalšíDouble ()

Následující dvojitý token jako vstup lze také ověřit a přijmout. Lze použít následující kód:

import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Systém .ven.tisk('Zadejte libovolný Double:');
Scanner scanObj= NovýSkener( Systém .v);

dvojnásobekna jednom=scanObj.dalšíDouble();
Systém .ven.println(na jednom);

scanObj.zavřít();
}
}

Příklad dvojitého čísla je 23,456. Dvojité číslo se liší od čísla float, protože má menší chybovost. Přední nebo zadní mezery byly odstraněny.

metoda nextLine ()

Metoda nextLine () je pro řetězec. Pokud je řetězec vstupním řádkem z klávesnice po stisknutí klávesy Enter, může mít znak nového řádku „ n“. Lze použít následující kód:

import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Systém .ven.println(„Zadejte řádek s\n: ');
Scanner scanObj= NovýSkener( Systém .v);

Tětiva p=scanObj.nextLine();
Systém .ven.println(p);

scanObj.zavřít();
}
}

Všimněte si, že typ řetězce začíná velkými písmeny S a nikoli malými písmeny s.

Metody nextLine (), hasNext () a next () byly použity dříve, v tomto článku. Skener má další metody a další primitivní datové metody - viz dále.

Přiřazení vstupu proměnné

Vstup lze přiřadit proměnné, jak ukazuje následující kód:

import java.util.Scanner;

veřejnost třídaTřída{
veřejnost statický prázdnéhlavní( Tětiva []args) {
Scanner scanObj= NovýSkener( Systém .v);

Systém .ven.tisk('Napište jméno: ');
Tětiva název=scanObj.nextLine();

Systém .ven.tisk('Zadejte věk:');
intstáří=scanObj.nextInt();

Systém .ven.tisk('Zadejte plat:');
dvojnásobekplat=scanObj.dalšíDouble();

Systém .ven.println('Název: ' +název+ ', Věk:' +stáří+ ', Plat:' +plat);

scanObj.zavřít();
}
}

Závěr

Skener v Javě je třída v balíčku java.util. Tato třída má za cíl číst vstup z řetězce, klávesnice, souboru nebo soketu sítě. Tento článek se soustředil hlavně na čtení vstupu z klávesnice a zobrazení výsledku v okně terminálu. Podobné nápady lze použít ke čtení vstupu z řetězce, souboru nebo síťového kanálu.

Chcete -li přečíst celý řádek vstupu z klávesnice, použijte metodu nextLine (). Řádek jako řetězec lze rozdělit na tokeny pomocí metod hasNext () a next () a cyklu while. Výchozí oddělovač pro rozdělení je mezera, ale programátor může zvolit jiný oddělovač. V případě potřeby nezapomeňte provést Ctrl+z pro zastavení cyklu while. Odebrání úvodních a koncových mezer lze provést pomocí jiných schémat, která nejsou v tomto článku řešena. Ověření tokenů lze také provést pomocí jiných schémat, která nejsou řešena v tomto článku.

Primitivní hodnoty lze číst pomocí nextBoolean (), nextByte (), nextInt () atd. Tyto metody nextXXX () provádějí ověření a také odstraňují úvodní a koncové mezery.

Java Scanner má mnoho dalších metod. Základní použití skeneru však bylo vysvětleno v tomto článku. Výběr tokenu se ve skutečnosti provádí pomocí technik regulárního výrazu. Použití technik regulárního výrazu je diskuse, někdy jindy.