Classes Java que você só ouviu falar - parte 1 - java.util.Scanner
A classe java.util.Scanner passou a fazer parte da gama de classes que acompanham uma instalação do Java a partir da versão 5.
Seu grande propósito é escanear texto e efetuar o parse em primitivos e strings baseando-se em expressões regulares para tal.
A seguir vemos um exemplo muito simples onde você pode observar a classe em funcionamento:
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()) {
int i = sc.nextInt();
System.out.println(i);
}
No exemplo apresentado, o loop continua executando até que você deixe de digitar números e digite algum outro tipo de caractere
Um outro exemplo muito interessante é o seguinte:
public static void main(String[] args) throws Exception {
Scanner sc = null;
try {
sc = new Scanner(new FileReader("Arquivo.txt")).useDelimiter(",");
while (sc.hasNextInt()) {
System.out.println("Int encontrado: " + sc.nextInt());
}
} finally {
sc.close();
}
}
Nesse exemplo, o arquivo denominado Arquivo.txt deve conter o seguinte:
1,2,3,4,5,6,7,8
Caso o arquivo contenha a separação por vírgula com espaços, o exemplo já não funcionará.
É aí que a classe java.util.Scanner mostra seu poder. Se você especificar uma expressão regular corretamente, veremos que é possível se adequar a esse tipo de cenário e especificar algo como 1, 2,3, 4,5,6,7,8 no arquivo, ainda obtendo o comportamento esperado.
O exemplo a seguir mostra o código com a expressão regular que atende ao cenário apresentado:
public static void main(String[] args) throws Exception {
Scanner sc = null;
try {
sc = new Scanner(new FileReader("Arquivo.txt"))
.useDelimiter("(\\s)*,(\\s)*");
while (sc.hasNextInt()) {
System.out.println("Int encontrado: " + sc.nextInt());
}
} finally {
sc.close();
}
}
Apresentei aqui uma classe Java que você provavelmente ainda não conhecia ou se conhecia, dificilmente já tinha usado. Espero que tenha gostado!