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:
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 } } }