logo

NumberFormatException em Java

A NumberFormatException é lançada quando tentamos converter uma string em um valor numérico, como float ou inteiro, mas o formato da string de entrada não é apropriado ou ilegal. Por formato ilegal, significa que se você estiver tentando analisar uma string para um número inteiro, mas a String contiver um valor booleano, ela terá um formato ilegal. Por exemplo - se tentarmos analisar uma string em um número inteiro, mas a string for nula.

É uma exceção não verificada. É uma subclasse de Exceção de argumento ilegal e implementa o Serializável interface.

Construtores de NumberFormatException

Construtor Descrição
NumberFormatException() Isso constrói uma NumberFormatException sem nenhuma mensagem detalhada especificada.
NumberFormatException(Strings) Isso constrói uma NumberFormatException com uma mensagem detalhada especificada em string s.

Exemplo de NumberFormatException

 public class Example { public static void main(String[] args) { int a = Integer.parseInt(null); //throws Exception as //the input string is of illegal format for parsing as it is null. } } 

Saída:

NumberFormatException em Java

Razões comuns para NumberFormatException

Como NumberFormatException ocorre devido ao formato inadequado da string para o argumento correspondente do método que está lançando a exceção, pode haver várias maneiras de fazer isso. Alguns deles são mencionados a seguir-

  • A string de entrada fornecida pode ser nula
    Exemplo- Inteiro.parseInt(nulo);
  • A string de entrada pode estar vazia-
    Exemplo- Integer.parseInt('');
  • A string de entrada pode ter espaço à direita-
    Exemplo- Integer.parseInt('123');
  • A string de entrada pode ter um espaço inicial
    Exemplo- Integer.parseInt('123');
  • A string de entrada pode ser alfanumérica-
    Exemplo- Long.parseLong('b2');
  • A string de entrada pode ter uma entrada que pode exceder o intervalo do tipo de dados que armazena a string analisada-
    Exemplo- Integer.parseInt('135'); O valor máximo possível do número inteiro pode ser 127, mas o valor na string é 135, o que está fora do intervalo, portanto, isso lançará a exceção.
  • Pode haver uma incompatibilidade entre a string de entrada e o tipo do método que está sendo usado para análise. Se você fornecer a string de entrada como '1.0' e tentar converter essa string em um valor inteiro, uma exceção NumberFormatException será lançada.
    Exemplo- Integer.parseInt('1..0');

Como evitar NumberFormatException?

A NumberFormatException é basicamente causada porque a string de entrada não está bem formatada ou é ilegal durante a análise em um valor numérico. Portanto, para evitar esta exceção, a string de entrada fornecida deve estar bem formatada.

Para ter uma string válida e bem formatada, primeiro verifique se a string de entrada não é nula. Em seguida, verifique se há espaços desnecessários e elimine todos eles. Depois disso, faça várias verificações para verificar se a string do argumento corresponde ao tipo do método que estamos usando para analisar a string. Se o método for ParseInt(), verifique se a string possui um valor inteiro e da mesma forma para todos os outros métodos faça as verificações necessárias.

Para evitar que um programa Java gere uma NumberFormatException, é sempre uma boa prática incluir as linhas de código que podem lançar essa exceção em um bloco try-catch conforme mostrado abaixo-

 public class NumberFormatExceptionExample { private static final String inputString = '123.33'; public static void main(String[] args) { try { int a = Integer.parseInt(inputString); }catch(NumberFormatException ex){ System.err.println('Invalid string in argumment'); //request for well-formatted string } } }