Com s'utilitza l'escàner a Java

How Use Scanner Java



L’escàner a Java és una classe del paquet java.util. Aquesta classe pretén llegir l'entrada d'una cadena, del teclat, d'un fitxer o d'un sòcol de xarxa. Aquest article es concentra només a llegir l'entrada del teclat i mostrar el resultat a la finestra del terminal. Es poden utilitzar idees similars per llegir l'entrada del fitxer o del canal de xarxa. L'escàner no imprimeix a la finestra del terminal. Per imprimir al terminal, utilitzeu l’objecte System.out. És senzill utilitzar aquest objecte per imprimir al terminal, com es mostra a continuació.

Per utilitzar la classe Scanner, primer s’ha d’importar. Després d’això, s’ha d’instanciar un objecte. Després d’utilitzar l’objecte Scanner, s’ha de tancar. L'objecte de flux d'entrada que representa el teclat és System.in. L'escàner té molts mètodes. En aquest article només s’explicaran els d’ús habitual.







Contingut de l'article



Ús senzill de la classe d’escàner

El següent codi demana a l'usuari que escrigui una frase i, a continuació, mostra la frase:



importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Scanner scanObj= nouEscàner( Sistema .dins);
Sistema .fora.println('Escriviu una frase i premeu Retorn:');

Corda frase=scanObj.nextLine();
Sistema .fora.println(frase);

scanObj.Tanca();
}
}

La primera línia importa la classe Scanner. A la funció principal, la primera línia crea un objecte escàner mitjançant l'objecte System.in per al teclat. Tan bon punt es crea l'objecte de l'escàner, comença a esperar l'entrada. La següent línia imprimeix un enunciat, demanant a l'usuari que escrigui una frase. La línia següent del codi utilitza el mètode nextLine () de l’objecte de l’escàner per llegir la frase de l’usuari després de prémer Retorn. La línia següent, al codi, torna a imprimir la frase a la finestra del terminal. L'última línia tanca l'objecte de l'escàner.





Escopir la línia d'entrada a valors

El següent codi divideix la línia d'entrada en paraules (fitxes), fent servir l'espai com a delimitador:

importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Scanner scanObj= nouEscàner( Sistema .dins);
Sistema .fora.println('Escriviu una línia de fitxes i premeu Retorn:');

mentre(scanObj.hasNext()){
Sistema .fora.println(scanObj.Pròxim());
}

scanObj.Tanca();
}
}

hasNext () i next () són altres dos mètodes de l'objecte de l'escàner. Quan l'objecte de l'escàner llegeix una línia, la manté. next () accedeix al següent testimoni (paraula). hasNext () retorna true si hi ha algun altre testimoni encara no accedit.



Malauradament, s'espera que l'usuari encara escrigui l'entrada per dividir i tornar a mostrar amb aquest codi. Per acabar tot això, premeu Ctrl + z i hauríeu de tornar a l’indicador d’ordres.

Al codi anterior, el delimitador separa les fitxes de l'espai. Es pot utilitzar un altre personatge. El següent codi utilitza la coma. No oblideu prémer Ctrl + z per acabar el bucle si proveu el codi.

importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Scanner scanObj= nouEscàner( Sistema .dins);
Sistema .fora.println('Escriviu una línia de fitxes i premeu Retorn:');

scanObj.useDelimiter(',');

mentre(scanObj.hasNext()){
Sistema .fora.println(scanObj.Pròxim());
}

scanObj.Tanca();
}
}

Si heu provat el codi, hauríeu notat que s’han inclòs espais en fitxes com a part de fitxes (sortida). L'expressió scanObj.useDelimiter (,); escrit després de llegir la línia d’entrada; és el que fa que la coma sigui el delimitador.

Lectura i validació de tipus de dades primitives

mètode nextBoolean ()

Al codi següent, s’espera que l’usuari escrigui vertader o fals sense les cometes i, a continuació, premeu la tecla Retorn si l’usuari escriu qualsevol altra cosa, com ara sí o no, es mostrarà un missatge d’error.

importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Sistema .fora.imprimir(Teniu més de 24 anys? ');
Scanner scanObj= nouEscàner( Sistema .dins);

booleàbl=scanObj.nextBoolean();
si (bl== cert) {
Sistema .fora.println('Teniu més de 24 anys');
}
en cas contrari si (bl== fals) {
Sistema .fora.println('Tens menys de 24 anys');
}

scanObj.Tanca();
}
}

Com que Java emetrà un missatge d'error sempre que l'entrada no sigui certa o falsa exactament, s'ha utilitzat else if en lloc de else.

La diferència entre els mètodes, print i println, és que print espera l'entrada a la línia actual, mentre que println espera l'entrada a la línia següent.

mètode nextByte ()

Amb el conjunt de caràcters ASCII, un caràcter és d’un byte. No obstant això, amb alguns conjunts de caràcters orientals, un caràcter pot consistir en més d'un byte. Independentment del conjunt de caràcters, el mètode nextByte llegeix i valida el següent byte de l'entrada. Amb aquest propòsit es pot utilitzar el codi següent:

importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Sistema .fora.imprimir('Número de tipus<128, press Enter: ');
Scanner scanObj= nouEscàner( Sistema .dins);

bytebt=scanObj.nextByte();
Sistema .fora.println(bt);

scanObj.Tanca();
}
}

Si s'introdueix un número superior a 127 o un caràcter alfabètic per a aquest codi, s'emetrà un missatge d'error.

nextInt () Mètode

El següent testimoni enter com a entrada també es pot validar i acceptar. Es pot utilitzar el següent codi:

importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Sistema .fora.imprimir('Introduïu qualsevol nombre enter:');
Scanner scanObj= nouEscàner( Sistema .dins);

inten un=scanObj.nextInt();
Sistema .fora.println(en un);

scanObj.Tanca();
}
}

S'han eliminat els espais principals o finals. Per a aquest codi, s'acceptaria qualsevol valor enter, inclosos els valors superiors a 127. Amb aquests mètodes nextXXX (), un cop falla la validació, s'emet un missatge d'error.

nextBigInteger () Mètode

Sembla que els enginyers de programari no deixaran mai de presentar coses noves. Un enter gran és un enter el valor del qual és molt més gran que el d’un enter. Tanmateix, amb Java, es pot llegir de la mateixa manera que l’enter. El següent codi ho il·lustra:

importació java.util.Scanner;
importació java.math.BigInteger;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Sistema .fora.println('Introduïu qualsevol enter per a Big Integer:');
Scanner scanObj= nouEscàner( Sistema .dins);

BigInteger en un=scanObj.nextBigInteger();
Sistema .fora.println(en un);

scanObj.Tanca();
}
}

Tingueu en compte la declaració d’importació, import java.math.BigInteger ;. Tingueu en compte també que el tipus enter gran comença amb una majúscula B i no amb una minúscula b.

nextFloat () Mètode

El següent testimoni flotant com a entrada també es pot validar i acceptar. Es pot utilitzar el següent codi:

importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Sistema .fora.imprimir('Introduïu qualsevol flotador:');
Scanner scanObj= nouEscàner( Sistema .dins);

flotaren un=scanObj.nextFloat();
Sistema .fora.println(en un);

scanObj.Tanca();
}
}

Un exemple de número flotant és 23.456. S'han eliminat els espais principals o finals.

nextDouble ()

El següent testimoni doble com a entrada també es pot validar i acceptar. Es pot utilitzar el següent codi:

importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Sistema .fora.imprimir('Introduïu qualsevol doble:');
Scanner scanObj= nouEscàner( Sistema .dins);

dobleen un=scanObj.següentDoble();
Sistema .fora.println(en un);

scanObj.Tanca();
}
}

Un exemple de número doble és 23.456. Un número doble és diferent d’un float perquè té menys marge d’error. S'han eliminat els espais principals o finals.

mètode nextLine ()

El mètode nextLine () és per a una cadena. Si la cadena és la línia d'entrada del teclat després de prémer Retorn, pot tenir el caràcter de línia nova, ' n'. Es pot utilitzar el següent codi:

importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Sistema .fora.println('Introduïu una línia que tingui\n: ');
Scanner scanObj= nouEscàner( Sistema .dins);

Corda pàg=scanObj.nextLine();
Sistema .fora.println(pàg);

scanObj.Tanca();
}
}

Fixeu-vos que el tipus de cadena s’inicia amb la majúscula S i no amb la minúscula.

En aquest article s’han utilitzat prèviament els mètodes nextLine (), hasNext () i next (). L'escàner té altres mètodes i altres mètodes de dades primitives (vegeu més endavant).

Assignació d’entrada a una variable

L'entrada es pot assignar a una variable, tal com mostra el codi següent:

importació java.util.Scanner;

públic classeLa classe{
públic estàtic buitprincipal( Corda []args) {
Scanner scanObj= nouEscàner( Sistema .dins);

Sistema .fora.imprimir('Introduïu el nom:');
Corda nom=scanObj.nextLine();

Sistema .fora.imprimir('Introduïu l'edat:');
intedat=scanObj.nextInt();

Sistema .fora.imprimir('Introduïu el salari:');
doblesou=scanObj.següentDoble();

Sistema .fora.println('Nom: ' +nom+ ', Edat:' +edat+ ', Sou: ' +sou);

scanObj.Tanca();
}
}

Conclusió

L’escàner a Java és una classe del paquet java.util. Aquesta classe pretén llegir l'entrada d'una cadena, del teclat, d'un fitxer o d'un sòcol de xarxa. Aquest article s'ha centrat principalment en llegir l'entrada del teclat i mostrar el resultat a la finestra del terminal. Es poden utilitzar idees similars per llegir l'entrada de la cadena, el fitxer o el canal de xarxa.

Per llegir tota la línia d’entrada del teclat, utilitzeu el mètode nextLine (). La línia com a cadena es pot dividir en fitxes, mitjançant els mètodes hasNext () i next (), i el bucle while. El delimitador per defecte per dividir és l’espai, però el programador pot triar algun altre delimitador. No oblideu fer Ctrl + z per aturar el bucle while, si cal. L'eliminació d'espais inicials i finals es pot fer mitjançant altres esquemes que no es tracten en aquest article. La validació de les fitxes també es pot fer mitjançant altres esquemes que no s’aborden en aquest article.

Els valors primitius es poden llegir utilitzant nextBoolean (), nextByte (), nextInt (), etc. Aquests mètodes nextXXX () fan la validació i també eliminen els espais inicials i finals.

Java Scanner té molts més mètodes. Tot i això, l’ús bàsic de l’escàner s’ha explicat en aquest article. La selecció d’un testimoni es realitza realment mitjançant tècniques d’expressió regular. L’ús de tècniques d’expressió regular és discussió, per algun altre temps.