Como Verificar se uma String Pode Ser Convertida em um Inteiro em Java

JavaBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se uma string pode ser convertida em um inteiro em Java. Esta é uma habilidade fundamental para lidar com a entrada do usuário ou dados de fontes externas.

Você explorará o método Integer.parseInt() para tentar a conversão, aprenderá como lidar com erros potenciais usando NumberFormatException e descobrirá técnicas para validar uma string antes de tentar analisá-la, garantindo um código robusto e livre de erros.

Tentar a Análise com Integer.parseInt()

Nesta etapa, exploraremos como converter uma String (texto) em um int (número inteiro) em Java. Esta é uma tarefa comum em programação, especialmente quando você precisa obter entrada numérica de um usuário ou ler números de um arquivo.

Java fornece um método embutido chamado Integer.parseInt() para essa finalidade. Vamos ver como funciona.

  1. Primeiro, certifique-se de estar no diretório ~/project. Você pode usar o comando cd ~/project no Terminal, se necessário.

  2. Agora, vamos criar um novo arquivo Java chamado StringToInt.java no diretório ~/project. Você pode fazer isso clicando com o botão direito no File Explorer à esquerda, selecionando "New File" e digitando StringToInt.java.

  3. Abra o arquivo StringToInt.java no Code Editor e cole o seguinte código:

    public class StringToInt {
        public static void main(String[] args) {
            String numberString = "123";
            int numberInt = Integer.parseInt(numberString);
    
            System.out.println("The string is: " + numberString);
            System.out.println("The integer is: " + numberInt);
        }
    }

    Vamos analisar as novas partes:

    • String numberString = "123";: Declaramos uma variável String chamada numberString e atribuímos a ela o valor "123". Observe que "123" está entre aspas duplas, indicando que é uma string.
    • int numberInt = Integer.parseInt(numberString);: Este é o núcleo desta etapa. Chamamos o método Integer.parseInt(), passando nossa numberString como um argumento. Este método tenta converter a string "123" em um inteiro. O resultado é armazenado em uma variável int chamada numberInt.
    • System.out.println("The string is: " + numberString);: Esta linha imprime a string original.
    • System.out.println("The integer is: " + numberInt);: Esta linha imprime o inteiro convertido.
  4. Salve o arquivo (Ctrl+S ou Cmd+S).

  5. Agora, vamos compilar o programa. Abra o Terminal e execute o seguinte comando:

    javac StringToInt.java

    Se a compilação for bem-sucedida, você não deverá ver nenhuma saída, e um arquivo StringToInt.class será criado no diretório ~/project.

  6. Finalmente, execute o programa compilado:

    java StringToInt

    Você deverá ver a seguinte saída:

    The string is: 123
    The integer is: 123

    Como você pode ver, o método Integer.parseInt() converteu com sucesso a string "123" no inteiro 123.

Na próxima etapa, exploraremos o que acontece quando a string não pode ser convertida em um inteiro.

Capturar NumberFormatException

Na etapa anterior, convertemos com sucesso uma string contendo apenas dígitos em um inteiro usando Integer.parseInt(). Mas o que acontece se a string contiver caracteres que não são dígitos? Vamos descobrir.

Quando Integer.parseInt() tenta converter uma string que não é uma representação válida de um número, ele lança uma NumberFormatException. Este é um tipo de erro que indica um problema com o formato da string numérica.

Para lidar com esses erros de forma elegante, podemos usar um bloco try-catch. Um bloco try-catch nos permite "tentar" um trecho de código que pode causar um erro, e se um erro ocorrer, podemos "capturá-lo" e tratá-lo de uma maneira específica, impedindo que nosso programa trave.

Vamos modificar nosso programa StringToInt.java para demonstrar isso.

  1. Abra o arquivo StringToInt.java no editor WebIDE.

  2. Modifique o código para incluir um bloco try-catch e altere a string de entrada:

    public class StringToInt {
        public static void main(String[] args) {
            String numberString = "abc"; // This string cannot be parsed as an integer
    
            try {
                int numberInt = Integer.parseInt(numberString);
                System.out.println("The string is: " + numberString);
                System.out.println("The integer is: " + numberInt);
            } catch (NumberFormatException e) {
                System.out.println("Error: Could not convert the string to an integer.");
                System.out.println("Details: " + e.getMessage());
            }
        }
    }

    Aqui está o que adicionamos:

    • String numberString = "abc";: Mudamos a string para "abc", que claramente não é um inteiro válido.
    • try { ... }: O código dentro do bloco try é o que queremos tentar. Neste caso, é a chamada Integer.parseInt().
    • catch (NumberFormatException e) { ... }: Se um NumberFormatException ocorrer dentro do bloco try, o código dentro do bloco catch será executado.
    • System.out.println("Error: Could not convert the string to an integer.");: Esta linha imprime uma mensagem de erro amigável ao usuário.
    • System.out.println("Details: " + e.getMessage());: Esta linha imprime mais detalhes sobre a exceção, o que pode ser útil para depuração.
  3. Salve o arquivo (Ctrl+S ou Cmd+S).

  4. Compile o programa modificado no Terminal:

    javac StringToInt.java
  5. Execute o programa compilado:

    java StringToInt

    Desta vez, como "abc" não pode ser analisado como um inteiro, o NumberFormatException será capturado, e você deverá ver uma saída semelhante a esta:

    Error: Could not convert the string to an integer.
    Details: For input string: "abc"

    Em vez de o programa travar, o bloco catch tratou o erro e imprimiu uma mensagem útil. Esta é uma experiência do usuário muito melhor!

Usar blocos try-catch é crucial para escrever programas robustos que podem lidar com entradas ou situações inesperadas.

Validar String Antes da Análise

Na etapa anterior, aprendemos como capturar um NumberFormatException quando Integer.parseInt() falha. Embora capturar exceções seja importante para lidar com erros, muitas vezes é melhor evitar que o erro aconteça em primeiro lugar.

Nesta etapa, aprenderemos como validar uma string antes de tentar analisá-la como um inteiro. Isso envolve verificar se a string contém apenas dígitos.

Uma maneira de fazer isso é iterar por cada caractere da string e verificar se é um dígito. Outra abordagem comum é usar expressões regulares, mas para iniciantes, um loop simples é mais fácil de entender.

Vamos modificar nosso programa StringToInt.java novamente para incluir uma verificação de validação.

  1. Abra o arquivo StringToInt.java no editor WebIDE.

  2. Substitua o código existente pelo seguinte:

    public class StringToInt {
    
        public static void main(String[] args) {
            String numberString = "123a"; // This string contains a non-digit character
    
            if (isValidInteger(numberString)) {
                int numberInt = Integer.parseInt(numberString);
                System.out.println("The string is: " + numberString);
                System.out.println("The integer is: " + numberInt);
            } else {
                System.out.println("Error: The string '" + numberString + "' is not a valid integer.");
            }
        }
    
        // Method to check if a string is a valid integer
        public static boolean isValidInteger(String str) {
            if (str == null || str.isEmpty()) {
                return false; // An empty or null string is not a valid integer
            }
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                if (i == 0 && (c == '-' || c == '+')) {
                    // Allow a leading sign (+ or -)
                    continue;
                }
                if (!Character.isDigit(c)) {
                    return false; // Found a non-digit character
                }
            }
            return true; // All characters are digits (or a leading sign)
        }
    }

    Vamos analisar as mudanças:

    • Adicionamos um novo método chamado isValidInteger(String str). Este método recebe uma string como entrada e retorna true se a string representa um inteiro válido e false caso contrário.
    • Dentro de isValidInteger, primeiro verificamos se a string é nula ou vazia.
    • Em seguida, percorremos cada caractere da string.
    • Character.isDigit(c) é um método Java embutido que verifica se um caractere é um dígito.
    • Adicionamos uma verificação para permitir um sinal de mais ou menos inicial.
    • No método main, agora usamos uma instrução if-else. Chamamos isValidInteger() para verificar a string antes de tentar analisá-la.
    • Se isValidInteger() retornar true, prosseguimos com Integer.parseInt().
    • Se retornar false, imprimimos uma mensagem de erro sem tentar analisar, evitando assim o NumberFormatException.
  3. Salve o arquivo (Ctrl+S ou Cmd+S).

  4. Compile o programa modificado no Terminal:

    javac StringToInt.java
  5. Execute o programa compilado:

    java StringToInt

    Como a string "123a" contém um caractere que não é um dígito, o método isValidInteger retornará false, e você deverá ver a seguinte saída:

    Error: The string '123a' is not a valid integer.

    Agora, vamos mudar a string de volta para um inteiro válido para ver o outro ramo da instrução if-else.

  6. Mude a variável numberString de volta para "456" no arquivo StringToInt.java:

    String numberString = "456";
  7. Salve o arquivo.

  8. Compile e execute o programa novamente:

    javac StringToInt.java
    java StringToInt

    Desta vez, isValidInteger retornará true, e você deverá ver:

    The string is: 456
    The integer is: 456

Ao validar a string antes da análise, podemos lidar com entradas inválidas de forma mais elegante e evitar erros de tempo de execução como NumberFormatException. Esta é uma boa prática para escrever um código mais robusto e confiável.

Resumo

Neste laboratório, aprendemos como converter uma String em um int em Java usando o método Integer.parseInt(). Criamos um arquivo Java, escrevemos código para demonstrar a conversão e compilamos o programa. Este método é essencial para lidar com entrada numérica de várias fontes.