HOWTO · Java

Validação de entrada em Java

Este artigo apresenta como validar a entrada em Java.

Nesta página

A validação é o processo de verificar a entrada do usuário ou os valores do banco de dados em relação a restrições específicas. A validação é aplicada para reduzir o tempo gasto pelo programa para executar a lógica de negócios real e, em seguida, encontrar problemas na entrada do usuário. O processo aumenta o desempenho e, portanto, resulta em quaisquer sessões de depuração adicionais em caso de falha.

No código Java, pegamos a entrada do usuário usando a classe Scanner. Existem vários métodos da classe Scanner que ajudam na validação do conteúdo de entrada.

Abaixo está o bloco de código que explica os métodos.

import java.util.Scanner;

public class InputValidation {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter any text: ");
    while (!scanner.hasNext("quit")) {
      System.out.println(scanner.hasNextInt() ? "The Input text is int: " + scanner.nextInt()
              : scanner.hasNextLong()         ? "The Input text is long: " + scanner.nextLong()
              : scanner.hasNextDouble()       ? "The Input text is double: " + scanner.nextDouble()
              : scanner.hasNextBoolean() ? "The Input text is boolean: " + scanner.nextBoolean()
                                         : "The Input text is String: " + scanner.next());
    }
  }
}

No bloco de código acima, uma instância da classe Scanner é criada. As chamadas do construtor usando uma nova palavra-chave usam um parâmetro Input Stream, digamos System.in.

Agora o trabalho real na instância do scanner é iniciado. Primeiro, na condição while, uma verificação é aplicada para fornecer uma condição de término. A expressão usa o método hasNext da classe Scanner. O método usa um padrão para corresponder ao token de entrada. E verifica se a entrada é algo diferente do texto quit. O método hasNext lança IllegalStateException quando o objeto do scanner é fechado.

Agora, quando o bloco é iniciado, a entrada é validada usando o método hasNextInt. Ele retorna verdadeiro apenas se o texto inserido for o valor int. O texto de entrada é verificado no console como um int usando o método nextInt e impresso no console. O método nextInt lança InputMismatchException quando o texto não corresponde ao Integer Regex, IllegalStateException quando a instância do scanner é fechada.

Agora, todo este bloco de verificação está escrito em instruções ternárias aninhadas. Se a primeira condição for avaliada como falsa, outra verificação será aplicada. O método hasNextDouble interpreta o texto como duplo e retorna verdadeiro se houver correspondência. O método nextDouble() retorna um valor duplo da saída padrão e imprime o mesmo no console, caso contrário, passa para a próxima verificação. O método nextDouble() lança InputMismatchException quando o próximo token do console não corresponde ao Float Regex, IllegalStateException quando a instância do scanner é fechada.

Outra verificação está usando o método hasNextBoolean. Este método verifica o valor booleano, verdadeiro ou falso. Se o valor retornado for booleano true, o uso de nextBoolean() é feito para obter a entrada do console e imprimir a mesma na tela de saída. Caso contrário, prossegue com a seção de outros operadores ternários. O método nextBoolean lança InputMismatchException quando o próximo token não encontra um valor booleano, IllegalStateException quando a instância do scanner é fechada.

Seguindo o mesmo padrão, a entrada é validada usando o método next. O método se torna a última condição da seção de verificação de entrada while. O método pesquisa e retorna todo o texto anterior do console. A função pode bloquear a saída do console enquanto espera pela entrada para fazer a varredura. O método sempre retorna um valor String. A avaliação trata os caracteres especiais também como strings e imprime na saída. A mesma exceção é lançada como outros métodos. Diga IllegalStateException se o scanner estiver fechado ou NoSuchElementException quando não houver mais tokens disponíveis.

Abaixo está o bloco de saída para o código de validação acima.

Enter any text: 
--
The input text is String: --
67
The input text is int: 67
1234567890000000
The input text is long: 1234567890000000
true
The input text is boolean: true
FALSE
The input text is boolean: false
90.08939782639
The input text is double: 90.08939782639
hi
The input text is String: hi
quit