Como usar o Scanner em Java

How Use Scanner Java



O Scanner em Java é uma classe do pacote java.util. Esta classe tem como objetivo ler a entrada de uma string, teclado, arquivo ou soquete de rede. Este artigo se concentra apenas na leitura da entrada do teclado e na exibição do resultado na janela do terminal. Idéias semelhantes podem ser usadas para ler a entrada do arquivo ou canal de rede. O scanner não imprime na janela do terminal. Para imprimir no terminal, use o objeto System.out. É simples usar este objeto para imprimir no terminal, conforme ilustrado abaixo.

Para usar a classe Scanner, ela deve ser importada primeiro. Depois disso, um objeto deve ser instanciado a partir dele. Depois de usar o objeto Scanner, ele deve ser fechado. O objeto de fluxo de entrada que representa o teclado é System.in. O scanner possui vários métodos. Apenas os mais usados ​​serão explicados neste artigo.







Conteúdo do Artigo



Uso simples da classe Scanner

O código a seguir pede ao usuário para digitar uma frase e, em seguida, exibe a frase:



importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Scanner scanObj= novoScanner( Sistema .no);
Sistema .Fora.println('Digite uma frase e pressione Enter:');

Fragmento frase=scanObj.nextLine();
Sistema .Fora.println(frase);

scanObj.fechar();
}
}

A primeira linha importa a classe Scanner. Na função principal, a primeira linha cria um objeto scanner usando o objeto System.in para o teclado. Assim que o objeto scanner é criado, ele começa a aguardar uma entrada. A próxima linha imprime uma instrução, pedindo ao usuário para digitar uma frase. A linha seguinte no código usa o método nextLine () do objeto scanner para ler a frase do usuário depois que ele pressiona Enter. A linha após, no código, reimprime a frase na janela do terminal. A última linha fecha o objeto do scanner.





Cuspindo Linha de Entrada em Valores

O código a seguir divide a linha de entrada em palavras (tokens), usando o espaço como delimitador:

importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Scanner scanObj= novoScanner( Sistema .no);
Sistema .Fora.println('Digite uma linha de tokens e pressione Enter:');

enquanto(scanObj.hasNext()){
Sistema .Fora.println(scanObj.próximo());
}

scanObj.fechar();
}
}

hasNext () e next () são dois outros métodos do objeto scanner. Quando o objeto do scanner lê uma linha, ele a mantém. next () acessa o próximo token (palavra). hasNext () retorna verdadeiro se houver qualquer outro token ainda não acessado.



Infelizmente, ainda se espera que o usuário digite a entrada para dividir e reexibir com este código. Para encerrar tudo isso, pressione Ctrl + z, e você deve estar de volta ao prompt de comando.

No código acima, o delimitador separa os tokens no espaço. Outro personagem pode ser usado. O código a seguir usa a vírgula. Não se esqueça de pressionar Ctrl + z para encerrar o loop se você testar o código.

importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Scanner scanObj= novoScanner( Sistema .no);
Sistema .Fora.println('Digite uma linha de tokens e pressione Enter:');

scanObj.useDelimitador(',');

enquanto(scanObj.hasNext()){
Sistema .Fora.println(scanObj.próximo());
}

scanObj.fechar();
}
}

Se você testou o código, notou que os espaços nos tokens foram incluídos como parte dos tokens (saída). A expressão scanObj.useDelimiter (,); digitado depois que a linha de entrada foi lida; é o que torna a vírgula, o delimitador.

Lendo e validando tipos de dados primitivos

método nextBoolean ()

No código a seguir, espera-se que o usuário digite verdadeiro ou falso sem as aspas e, em seguida, pressione a tecla Enter se o usuário digitar qualquer outra coisa, como sim ou não, uma mensagem de erro será exibida.

importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Sistema .Fora.imprimir('Você está acima de 24? ');
Scanner scanObj= novoScanner( Sistema .no);

boleanobl=scanObj.nextBoolean();
E se (bl== verdade) {
Sistema .Fora.println('Você tem mais de 24 anos');
}
outro E se (bl== falso) {
Sistema .Fora.println('Você tem menos de 24 anos');
}

scanObj.fechar();
}
}

Uma vez que o java emitirá uma mensagem de erro desde que a entrada não seja exatamente verdadeira ou falsa, o else if foi usado em vez do else.

A diferença entre os métodos, print e println, é que print espera a entrada na linha atual, enquanto println espera a entrada na próxima linha.

método nextByte ()

Com o conjunto de caracteres ASCII, um caractere tem um byte. No entanto, com alguns conjuntos de caracteres orientais, um caractere pode consistir em mais de um byte. Independentemente do conjunto de caracteres, o método nextByte lê e valida o próximo byte da entrada. O código a seguir pode ser usado para essa finalidade:

importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Sistema .Fora.imprimir('Digite o número<128, press Enter: ');
Scanner scanObj= novoScanner( Sistema .no);

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

scanObj.fechar();
}
}

Se um número maior que 127 ou um caractere do alfabeto for inserido para este código, uma mensagem de erro será emitida.

Método nextInt ()

O próximo token inteiro como uma entrada também pode ser validado e aceito. O seguinte código pode ser usado:

importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Sistema .Fora.imprimir('Digite qualquer número inteiro:');
Scanner scanObj= novoScanner( Sistema .no);

intnum=scanObj.nextInt();
Sistema .Fora.println(num);

scanObj.fechar();
}
}

Espaços à esquerda ou à direita foram removidos. Para este código, qualquer valor inteiro, incluindo valores maiores que 127, seria aceito. Com esses métodos nextXXX (), uma vez que a validação falha, uma mensagem de erro é emitida.

Método nextBigInteger ()

Parece que os engenheiros de software nunca vão parar de inventar coisas novas. Um grande número inteiro é um número inteiro cujo valor é muito maior do que um número inteiro. No entanto, com o Java, ele pode ser lido da mesma forma que o inteiro. O código a seguir ilustra isso:

importar java.util.Scanner;
importar java.math.BigInteger;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Sistema .Fora.println('Digite qualquer número inteiro para grande número inteiro:');
Scanner scanObj= novoScanner( Sistema .no);

BigInteger num=scanObj.nextBigInteger();
Sistema .Fora.println(num);

scanObj.fechar();
}
}

Observe a instrução import, import java.math.BigInteger ;. Além disso, observe que o tipo de número inteiro grande é iniciado com um B maiúsculo e não um b minúsculo.

Método nextFloat ()

O próximo token flutuante como uma entrada também pode ser validado e aceito. O seguinte código pode ser usado:

importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Sistema .Fora.imprimir('Insira qualquer flutuante:');
Scanner scanObj= novoScanner( Sistema .no);

flutuadornum=scanObj.nextFloat();
Sistema .Fora.println(num);

scanObj.fechar();
}
}

Um exemplo de número flutuante é 23,456. Espaços à esquerda ou à direita foram removidos.

nextDouble ()

O próximo token duplo como uma entrada também pode ser validado e aceito. O seguinte código pode ser usado:

importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Sistema .Fora.imprimir('Digite qualquer duplo:');
Scanner scanObj= novoScanner( Sistema .no);

Duplonum=scanObj.nextDouble();
Sistema .Fora.println(num);

scanObj.fechar();
}
}

Um exemplo de número duplo é 23,456. Um número duplo é diferente de um float porque tem menos margem de erro. Espaços à esquerda ou à direita foram removidos.

método nextLine ()

O método nextLine () é para uma string. Se a string for a linha de entrada do teclado após pressionar Enter, ela pode ter o caractere de nova linha, ‘ n’. O seguinte código pode ser usado:

importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Sistema .Fora.println('Digite uma linha tendo\n: ');
Scanner scanObj= novoScanner( Sistema .no);

Fragmento p=scanObj.nextLine();
Sistema .Fora.println(p);

scanObj.fechar();
}
}

Observe que o tipo de string começa com S maiúsculo e não com s minúsculo.

Os métodos nextLine (), hasNext () e next () foram usados ​​anteriormente neste artigo. O scanner possui outros métodos e outros métodos de dados primitivos - veja mais tarde.

Atribuição de entrada a uma variável

A entrada pode ser atribuída a uma variável, como mostra o código a seguir:

importar java.util.Scanner;

público classeA classe{
público estático vazioa Principal( Fragmento []args) {
Scanner scanObj= novoScanner( Sistema .no);

Sistema .Fora.imprimir('Insira o nome: ');
Fragmento nome=scanObj.nextLine();

Sistema .Fora.imprimir('Digite a idade:');
intera=scanObj.nextInt();

Sistema .Fora.imprimir('Digite o salário:');
Duplosalário=scanObj.nextDouble();

Sistema .Fora.println('Nome: ' +nome+ ', Era: ' +era+ ', Salário:' +salário);

scanObj.fechar();
}
}

Conclusão

O Scanner em Java é uma classe do pacote java.util. Esta classe tem como objetivo ler a entrada de uma string, teclado, arquivo ou soquete de rede. Este artigo concentrou-se principalmente na leitura da entrada do teclado e na exibição do resultado na janela do terminal. Idéias semelhantes podem ser usadas para ler a entrada da string, arquivo ou canal de rede.

Para ler toda a linha de entrada do teclado, use o método nextLine (). A linha como uma string pode ser dividida em tokens, usando os métodos hasNext () e next () e o loop while. O delimitador padrão para divisão é o espaço, mas o programador pode escolher algum outro delimitador. Não se esqueça de fazer Ctrl + z para interromper o loop while, se necessário. A remoção de espaços à esquerda e à direita pode ser feita usando outros esquemas não abordados neste artigo. A validação dos tokens também pode ser feita usando outros esquemas não abordados neste artigo.

Os valores primitivos podem ser lidos usando nextBoolean (), nextByte (), nextInt (), etc. Esses métodos nextXXX () fazem validação e também removem espaços à esquerda e à direita.

O Java Scanner possui muitos outros métodos. No entanto, o uso básico do Scanner foi explicado neste artigo. A seleção de um token é, na verdade, feita usando técnicas de expressão regular. O uso de técnicas de expressão regular é uma discussão, para algum outro momento.