CodeGym/Blogue Java/Random-PT/Classe do Scanner Java
John Squirrels
Nível 41
San Francisco

Classe do Scanner Java

Publicado no grupo Random-PT
Oi! Nossa aula de hoje será especial! Na lição de hoje, falaremos sobre Java Scanner Class. Anteriormente, o processo de concluir tarefas e escrever programas era simples: escrevemos algum código, executamos o main()método, o programa faz o que é necessário e pronto. Mas agora tudo vai mudar! Hoje vamos aprender como realmente interagir com o programa: vamos ensiná-lo a responder às nossas ações! Antes de começarmos a analisar o código, você já teve que lidar com um dispositivo como um scanner? Provavelmente. O interior de um scanner é bastante complicado, mas a ideia básica de como ele funciona é muito simples: ele lê os dados que o usuário fornece (como passaporte ou apólice de seguro) e armazena essas informações na memória (por exemplo, como uma imagem ). Hoje você vai criar seu próprio scanner! Claro que não vai dar conta de documentos em papel, mas texto não será problema para ele :) Vamos lá!

Classe Scanner do Java

Classe do scanner - 1Em primeiro lugar, devemos nos familiarizar com a classe java.util.Scanner . Sua funcionalidade é muito simples. Como um scanner real, ele lê dados de uma fonte que você especifica. Por exemplo, uma string, um arquivo, o console. Em seguida, ele reconhece as informações e as processa adequadamente. Aqui está o exemplo mais simples:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
Criamos um objeto scanner e especificamos sua fonte de dados (uma string de texto). O método nextLine() acessa a fonte de dados (nosso texto com uma quadra), encontra a próxima linha não lida (que é a primeira linha neste caso) e a retorna. Em seguida, exibimos no console: Saída do console:
It matters not how strait the gate,
Podemos usar o método nextLine() várias vezes e exibir o trecho inteiro do poema:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
   }
}
A cada vez, nosso scanner dá um passo à frente e lê a próxima linha. A saída do programa é exibida:
It matters not how strait the gate,
How charged with punishments the scroll,
I am the master of my fate,
I am the captain of my soul
Como já dissemos, a fonte de dados do scanner não precisa ser uma string. Por exemplo, pode ser o console. Algumas novidades interessantes para você: anteriormente, apenas exibimos os dados lá, mas agora vamos ler os dados do teclado! Vamos ver o que mais a classe Scanner faz:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
O método nextInt() lê e retorna o número digitado. Em nosso programa, usamos para atribuir um valor à variável number . Já está mais para um scanner de verdade! O programa pede ao usuário para digitar qualquer número. Após o usuário ter feito isso, o programa agradece ao usuário, exibe o resultado e finaliza. Mas ainda temos um problema sério. O usuário pode cometer um erro e digitar algo errado. Aqui está um exemplo em que nosso programa atual para de funcionar:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
Vamos tentar inserir a string "CodeGym" em vez de um número: Saída do console:
Enter a number:
CodeGym
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Main.main(Main.java:10) Process finished with exit code 1
Ei, oi. Estamos com um grande problema -_- Para evitar tais situações, precisamos encontrar uma maneira de verificar os dados inseridos pelo usuário. Por exemplo, se o usuário inserir algo diferente de um número, seria bom exibir um aviso de que as informações inseridas não são um número. E se as informações estiverem corretas, podemos confirmar. Mas isso exigiria que "olhássemos para o futuro" para ver o que está por vir em nosso fluxo. Scanner pode fazer isso? E como! E tem uma série de métodos para fazer isso: hasNextInt() — Este método verifica se o próximo bloco de dados de entrada é um número (retorna verdadeiro ou falso, conforme apropriado). hasNextLine() — Este método verifica se o próximo bloco de entrada é uma string. hasNextByte() ,hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() — Todos esses métodos executam verificações semelhantes para os tipos de dados restantes. Vamos tentar mudar nosso programa de leitura de números:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thanks! You entered the number " + number);
       } else {
           System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
       }

   }
}
Agora nosso programa verifica se o próximo caractere digitado é um número. E exibe a confirmação somente se for. Se a entrada não passar na verificação, o programa toma nota e pede ao usuário para tentar novamente. Basicamente, você pode se comunicar com o objeto Scanner e descobrir com antecedência que tipo de dados espera por você. Um número, string ou outra coisa? Um número? E que tipo? An int , short , long ?" Essa flexibilidade lhe dá a oportunidade de construir a lógica do programa que depende do comportamento do usuário. Devemos observar outro método importante: useDelimiter( ) . Você passa uma string para esse método. A string contém o caracteres que deseja usar como separadores ou delimitadores. Por exemplo, suponha que de repente nos interessemos pela poesia japonesa e decidamos usar nosso scanner para ler alguns haicai escritos pelo grande poeta Matsuo Bashō. Mesmo que três versos diferentes sejam passados ​​para nós como uma sequência desajeitada, podemos facilmente separá-los e reproduzi-los lindamente:
public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a withered branch'" +
               "A crow has alighted.'" +
               "Nightfall in autumn." +
               "''***''" +
               "Such a moon above,'" +
               "Like a tree cut at the root:'" +
               "he fresh cut is white." +
               "''***''" +
               "How the river floods!'" +
               "A heron wanders on short legs,'" +
               "Knee-deep in the water.");

       scan.useDelimiter("'");

       while (scan.hasNext()) {
           System.out.println(scan.next());
       }

       scan.close();
   }
}
Usamos "\ n /*/*/*" (caractere de nova linha e três asteriscos) como nosso delimitador. Como resultado, temos uma bela saída de console, assim como nos livros:
On a withered branch
A crow has alighted.
Nightfall in autumn.

***

Such a moon above,
Like a tree cut at the root:
The fresh cut is white.

***

How the river floods!
A heron wanders on short legs,
Knee-deep in the water.
Este exemplo tem mais um método que devemos destacar absolutamente: close() . Como qualquer objeto que trabalha com fluxos de E/S, o scanner deve ser fechado ao terminar para que pare de consumir os recursos do computador. Nunca se esqueça do método close() !
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

       sc.close(); // Now we've done everything right!

   }
}
É isso! Como você pode ver, por quão útil é, a classe Scanner é muito fácil de usar! :) Para reforçar o que você aprendeu, sugerimos que você assista a uma vídeo aula do nosso Curso de Java
Comentários
  • Populares
  • Novas
  • Antigas
Você precisa acessar para deixar um comentário
Esta página ainda não tem nenhum comentário