Dominando Java Scanner: Guia Completo com Exemplos Práticos
Dominando Java Scanner
Descubra como usar a classe Scanner do Java para ler texto, números e tipos complexos de várias fontes, apoiado por exemplos claros do mundo real.
A classe Scanner em java.util permite capturar entrada de streams, arquivos, strings e console. Abaixo percorremos seus padrões de uso principais.
Exemplo 1: Lendo uma Linha Completa de Texto
import java.util.Scanner;
class Main {
public static void main(String[] args) {
// Cria um Scanner que lê da entrada padrão
Scanner input = new Scanner(System.in);
System.out.print("Digite seu nome: ");
// Lê uma linha inteira, incluindo espaços
String nome = input.nextLine();
System.out.println("Meu nome é " + nome);
input.close();
}
}
Saída
Digite seu nome: Kelvin Meu nome é Kelvin
Note a linha Scanner input = new Scanner(System.in); – ela constrói um Scanner que escuta entrada do teclado.
O método nextLine() consome a linha toda até uma quebra de linha.
Importando a Classe Scanner
Antes de usar Scanner, importe-o:
import java.util.Scanner;
Para mais sobre imports de pacotes, veja Pacotes Java.
Criando Objetos Scanner
Dependendo da sua fonte de entrada, instancie um Scanner assim:
// De um input stream (ex: System.in)
Scanner sc1 = new Scanner(InputStream input);
// De um arquivo
Scanner sc2 = new Scanner(File file);
// De uma string
Scanner sc3 = new Scanner(String str);
Métodos Principais do Scanner para Entrada
A classe Scanner oferece uma variedade de métodos para ler diferentes tipos de dados. Abaixo está uma referência rápida:
| Método | Descrição |
|---|---|
nextInt() | Lê um int |
nextFloat() | Lê um float |
nextBoolean() | Lê um boolean |
nextLine() | Lê uma linha completa de texto |
next() | Lê uma única palavra (até whitespace) |
nextByte() | Lê um byte |
nextDouble() | Lê um double |
nextShort() | Lê um short |
nextLong() | Lê um long |
Exemplo 2: Usando nextInt()
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Digite um inteiro: ");
int dado1 = input.nextInt();
System.out.println("Usando nextInt(): " + dado1);
input.close();
}
}
Saída
Digite um inteiro: 22 Usando nextInt(): 22
Exemplo 3: Usando nextDouble()
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Digite valor Double: ");
double valor = input.nextDouble();
System.out.println("Usando nextDouble(): " + valor);
input.close();
}
}
Saída
Digite valor Double: 33.33 Usando nextDouble(): 33.33
Exemplo 4: Usando next()
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Digite seu nome: ");
String valor = input.next();
System.out.println("Usando next(): " + valor);
input.close();
}
}
Saída
Digite seu nome: Jonny Walker Usando next(): Jonny
Note que next() para no primeiro whitespace, então apenas o primeiro nome é capturado.
Exemplo 5: Usando nextLine()
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Digite seu nome: ");
String valor = input.nextLine();
System.out.println("Usando nextLine(): " + valor);
input.close();
}
}
Saída
Digite seu nome: Jonny Walker Usando nextLine(): Jonny Walker
Diferente de next(), nextLine() captura a linha inteira, incluindo espaços, até um caractere de nova linha.
Leitura Recomendada: Java Scanner pulando nextLine()
Scanner com BigInteger e BigDecimal
Para números de alta precisão, Scanner suporta:
- nextBigInteger() – Lê um
BigInteger - nextBigDecimal() – Lê um
BigDecimal
Exemplo: Lendo BigInteger e BigDecimal
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Digite um grande inteiro: ");
BigInteger valor1 = input.nextBigInteger();
System.out.println("Usando nextBigInteger(): " + valor1);
System.out.print("Digite um grande decimal: ");
BigDecimal valor2 = input.nextBigDecimal();
System.out.println("Usando nextBigDecimal(): " + valor2);
input.close();
}
}
Saída
Digite um grande inteiro: 987654321 Usando nextBigInteger(): 987654321 Digite um grande decimal: 9.55555 Usando nextBigDecimal(): 9.55555
Como Scanner Funciona Internamente
Scanner lê uma linha inteira, então a divide em tokens usando whitespace por padrão. Cada token pode então ser recuperado com o método apropriado. Por exemplo, dada a entrada Ele tem 22, os tokens são Ele, tem e 22.
Dica: Tokens são separados por espaços, tabs ou novas linhas a menos que você personalize o delimitador.
Java
- Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
- Operador instanceof em Java: Guia Completo
- Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
- Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
- Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
- Dominando Java Scanner: Guia Completo com Exemplos Práticos
- Dominando Java Generics – Construindo Código Reutilizável e Type-Safe
- Dominando Operações de Arquivo em Java com java.io – Criação, Leitura, Escrita e Exclusão