Come usare Scanner in Java

How Use Scanner Java



Lo Scanner in Java è una classe nel pacchetto java.util. Questa classe mira a leggere l'input da una stringa, dalla tastiera, da un file o da un socket di rete. Questo articolo si concentra solo sulla lettura dell'input dalla tastiera e sulla visualizzazione del risultato nella finestra del terminale. Idee simili possono essere utilizzate per leggere l'input dal file o dal canale di rete. Lo scanner non stampa sulla finestra del terminale. Per stampare sul terminale, utilizzare l'oggetto System.out. È semplice utilizzare questo oggetto per stampare sul terminale, come illustrato di seguito.

Per utilizzare la classe Scanner, deve essere prima importata. Successivamente, un oggetto deve essere istanziato da esso. Dopo aver utilizzato l'oggetto Scanner, deve essere chiuso. L'oggetto flusso di input che rappresenta la tastiera è System.in. Lo scanner ha molti metodi. In questo articolo verranno spiegati solo quelli comunemente usati.







Contenuto dell'articolo



Utilizzo semplice della classe scanner

Il codice seguente chiede all'utente di digitare una frase, quindi visualizza la frase:



importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Scansione scannerObiettivo= nuovoScanner( Sistema .in);
Sistema .fuori.println('Digita una frase e premi Invio:');

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

scanObj.chiudere();
}
}

La prima riga importa la classe Scanner. Nella funzione principale, la prima riga crea un oggetto scanner utilizzando l'oggetto System.in per la tastiera. Non appena l'oggetto scanner viene creato, inizia ad attendere l'input. La riga successiva stampa un'istruzione, chiedendo all'utente di digitare una frase. La riga che segue nel codice utilizza il metodo nextLine() dell'oggetto scanner per leggere la frase dell'utente dopo aver premuto Invio. La riga dopo, nel codice, ristampa la frase nella finestra del terminale. L'ultima riga chiude l'oggetto scanner.





Sputare la riga di input in valori

Il codice seguente divide la riga di input in parole (token), utilizzando lo spazio come delimitatore:

importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Scansione scannerObiettivo= nuovoScanner( Sistema .in);
Sistema .fuori.println('Digita una riga di token e premi Invio:');

mentre(scanObj.haSuccessivo()){
Sistema .fuori.println(scanObj.prossimo());
}

scanObj.chiudere();
}
}

hasNext() e next() sono altri due metodi dell'oggetto scanner. Quando l'oggetto scanner legge una riga, la mantiene. next() accede al token successivo (parola). hasNext() restituisce true se sono presenti altri token a cui non è ancora stato effettuato l'accesso.



Sfortunatamente, l'utente deve ancora digitare l'input per la suddivisione e la rivisualizzazione con questo codice. Per terminare tutto ciò, premi Ctrl + z e dovresti tornare al prompt dei comandi.

Nel codice sopra, il delimitatore separa i token nello spazio. È possibile utilizzare un altro carattere. Il codice seguente utilizza la virgola. Non dimenticare di premere Ctrl+z per terminare il ciclo se provi il codice.

importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Scansione scannerObiettivo= nuovoScanner( Sistema .in);
Sistema .fuori.println('Digita una riga di token e premi Invio:');

scanObj.useDelimiter(',');

mentre(scanObj.haSuccessivo()){
Sistema .fuori.println(scanObj.prossimo());
}

scanObj.chiudere();
}
}

Se hai testato il codice, avresti notato che gli spazi nei token sono stati inclusi come parte dei token (output). L'espressione, scanObj.useDelimiter(,); digitato dopo che la riga di input è stata letta; è ciò che fa la virgola, il delimitatore.

Lettura e convalida di tipi di dati primitivi

metodo nextBoolean()

Nel codice seguente, l'utente deve digitare true o false senza le virgolette e quindi premere il tasto Invio se l'utente digita qualcos'altro, ad esempio sì o no, verrà visualizzato un messaggio di errore.

importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Sistema .fuori.Stampa('Hai più di 24 anni? ');
Scansione scannerObiettivo= nuovoScanner( Sistema .in);

booleanoblu=scanObj.nextBoolean();
Se (blu== vero) {
Sistema .fuori.println('Hai più di 24 anni');
}
altro Se (blu== falso) {
Sistema .fuori.println('Hai meno di 24 anni');
}

scanObj.chiudere();
}
}

Poiché java emetterà un messaggio di errore finché l'input non è esattamente vero o falso, è stato utilizzato else if al posto di else.

La differenza tra i metodi print e println è che print si aspetta l'input sulla riga corrente, mentre println si aspetta l'input sulla riga successiva.

metodo nextByte()

Con il set di caratteri ASCII, un carattere è un byte. Tuttavia, con alcuni set di caratteri orientali, un carattere può essere costituito da più di un byte. Indipendentemente dal set di caratteri, il metodo nextByte legge e convalida il byte successivo dell'input. A tale scopo può essere utilizzato il seguente codice:

importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Sistema .fuori.Stampa('Digitare il numero<128, press Enter: ');
Scansione scannerObiettivo= nuovoScanner( Sistema .in);

bytebt=scanObj.successivoByte();
Sistema .fuori.println(bt);

scanObj.chiudere();
}
}

Se viene immesso un numero maggiore di 127 o un carattere alfabetico per questo codice, verrà emesso un messaggio di errore.

metodo nextInt()

Anche il successivo token intero come input può essere convalidato e accettato. È possibile utilizzare il seguente codice:

importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Sistema .fuori.Stampa('Inserisci un numero intero: ');
Scansione scannerObiettivo= nuovoScanner( Sistema .in);

intnessuno=scanObj.successivoInt();
Sistema .fuori.println(nessuno);

scanObj.chiudere();
}
}

Gli spazi iniziali o finali sono stati rimossi. Per questo codice, sarebbe accettato qualsiasi valore intero, inclusi i valori maggiori di 127. Con questi metodi nextXXX(), una volta che la convalida fallisce, viene emesso un messaggio di errore.

metodo nextBigInteger()

Sembra che gli ingegneri del software non smetteranno mai di inventare cose nuove. Un numero intero grande è un numero intero il cui valore è molto più grande di quello di un numero intero. Tuttavia, con Java, può essere letto allo stesso modo dell'intero. Il codice seguente lo illustra:

importare java.util.Scanner;
importare java.math.BigInteger;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Sistema .fuori.println('Inserisci un numero intero per un numero intero grande: ');
Scansione scannerObiettivo= nuovoScanner( Sistema .in);

BigInteger nessuno=scanObj.successivoBigInteger();
Sistema .fuori.println(nessuno);

scanObj.chiudere();
}
}

Nota l'istruzione import, import java.math.BigInteger;. Si noti inoltre che il tipo intero grande inizia con una B maiuscola e non una b minuscola.

metodo nextFloat()

Anche il successivo token float come input può essere convalidato e accettato. È possibile utilizzare il seguente codice:

importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Sistema .fuori.Stampa('Inserisci qualsiasi Float: ');
Scansione scannerObiettivo= nuovoScanner( Sistema .in);

galleggiantenessuno=scanObj.successivoFloat();
Sistema .fuori.println(nessuno);

scanObj.chiudere();
}
}

Un esempio di numero float è 23.456. Gli spazi iniziali o finali sono stati rimossi.

successivoDouble()

Anche il doppio token successivo come input può essere convalidato e accettato. È possibile utilizzare il seguente codice:

importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Sistema .fuori.Stampa('Inserisci qualsiasi doppio: ');
Scansione scannerObiettivo= nuovoScanner( Sistema .in);

Doppionessuno=scanObj.successivoDouble();
Sistema .fuori.println(nessuno);

scanObj.chiudere();
}
}

Un esempio di numero doppio è 23,456. Un numero doppio è diverso da un float perché ha un margine di errore inferiore. Gli spazi iniziali o finali sono stati rimossi.

metodo nextLine()

Il metodo nextLine() è per una stringa. Se la stringa è la riga di input dalla tastiera dopo aver premuto Invio, può avere il carattere di nuova riga, ' '. È possibile utilizzare il seguente codice:

importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Sistema .fuori.println('Inserisci una riga con\n : ');
Scansione scannerObiettivo= nuovoScanner( Sistema .in);

Corda P=scanObj.nextLine();
Sistema .fuori.println(P);

scanObj.chiudere();
}
}

Notare che il tipo di stringa inizia con la S maiuscola e non con la s minuscola.

I metodi nextLine(), hasNext() e next() sono stati usati in precedenza, in questo articolo. Lo scanner ha altri metodi e altri metodi di dati primitivi - vedere più avanti.

Assegnazione di input a una variabile

L'ingresso può essere assegnato a una variabile, come mostra il codice seguente:

importare java.util.Scanner;

pubblico classeLa classe{
pubblico statico vuotoprincipale( Corda []argomenti) {
Scansione scannerObiettivo= nuovoScanner( Sistema .in);

Sistema .fuori.Stampa('Inserisci il nome: ');
Corda nome=scanObj.nextLine();

Sistema .fuori.Stampa('Inserisci età: ');
intetà=scanObj.successivoInt();

Sistema .fuori.Stampa('Inserisci stipendio: ');
Doppiostipendio=scanObj.successivoDouble();

Sistema .fuori.println('Nome: ' +nome+ ', Età: ' +età+ ', Stipendio: ' +stipendio);

scanObj.chiudere();
}
}

Conclusione

Lo Scanner in Java è una classe nel pacchetto java.util. Questa classe mira a leggere l'input da una stringa, dalla tastiera, da un file o da un socket di rete. Questo articolo si è concentrato principalmente sulla lettura dell'input dalla tastiera e sulla visualizzazione del risultato nella finestra del terminale. Idee simili possono essere utilizzate per leggere l'input dalla stringa, dal file o dal canale di rete.

Per leggere l'intera riga dell'input da tastiera, utilizzare il metodo nextLine(). La riga come stringa può essere suddivisa in token, utilizzando i metodi hasNext() e next() e il ciclo while. Il delimitatore predefinito per la suddivisione è lo spazio, ma il programmatore può scegliere un altro delimitatore. Non dimenticare di premere Ctrl+z per interrompere il ciclo while, se necessario. La rimozione degli spazi iniziali e finali può essere eseguita utilizzando altri schemi non trattati in questo articolo. La convalida dei token può essere eseguita anche utilizzando altri schemi non trattati in questo articolo.

I valori primitivi possono essere letti utilizzando nextBoolean(), nextByte(), nextInt(), ecc. Questi metodi nextXXX() eseguono la convalida e rimuovono anche gli spazi iniziali e finali.

Lo scanner Java ha molti altri metodi. Tuttavia, l'uso di base dello scanner è stato spiegato in questo articolo. La selezione di un token viene effettivamente eseguita utilizzando tecniche di espressione regolare. L'uso delle tecniche di espressione regolare è oggetto di discussione, per qualche altra volta.