La excepción NumberFormatException se produce cuando intentamos convertir una cadena en un valor numérico como flotante o entero, pero el formato de la cadena de entrada no es apropiado o ilegal. Por formato ilegal, se entiende que si está intentando analizar una cadena en un número entero pero la cadena contiene un valor booleano, tiene un formato ilegal. Por ejemplo, si intentamos analizar una cadena en un número entero pero la cadena es nula.
Es una excepción no controlada. Es una subclase de Argumento de excepción ilegal e implementa el Serializable interfaz.
Constructores de NumberFormatException
Constructor | Descripción |
---|---|
NúmeroFormatException() | Esto construye una NumberFormatException sin ningún mensaje detallado especificado. |
NumberFormatException (cadena s) | Esto construye una NumberFormatException con un mensaje detallado especificado en la cadena s. |
Ejemplo de excepción de formato numérico
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. } }
Producción:
Razones comunes para NumberFormatException
Dado que NumberFormatException ocurre debido al formato inadecuado de la cadena para el argumento correspondiente del método que genera la excepción, puede haber varias formas de hacerlo. Algunos de ellos se mencionan a continuación:
- La cadena de entrada proporcionada puede ser nula.
Ejemplo- Entero.parseInt(nulo); - La cadena de entrada puede estar vacía.
Ejemplo- Entero.parseInt(''); - Es posible que la cadena de entrada tenga espacios al final.
Ejemplo- Entero.parseInt('123'); - Es posible que la cadena de entrada tenga un espacio inicial.
Ejemplo- entero.parseInt('123'); - La cadena de entrada puede ser alfanumérica.
Ejemplo- Long.parseLong('b2'); - La cadena de entrada puede tener una entrada que podría exceder el rango del tipo de datos que almacena la cadena analizada.
Ejemplo- Entero.parseInt('135'); El valor máximo posible de un número entero puede ser 127, pero el valor en la cadena es 135, que está fuera de rango, por lo que se generará la excepción. - Puede haber una discrepancia entre la cadena de entrada y el tipo de método que se utiliza para el análisis. Si proporciona una cadena de entrada como '1.0' e intenta convertir esta cadena en un valor entero, se generará una excepción NumberFormatException.
Ejemplo- Integer.parseInt('1..0');
¿Cómo evitar NumberFormatException?
La excepción NumberFormatException se debe básicamente a que la cadena de entrada no está bien formateada o es ilegal al analizarla en un valor numérico. Entonces, para evitar esta excepción, la cadena de entrada proporcionada debe estar bien formateada.
Para tener una cadena válida y bien formateada, primero que nada, verifique si la cadena de entrada no es nula. Luego, verifique si hay espacios innecesarios y elimínelos todos, luego realice varias comprobaciones para verificar que la cadena de argumento coincida con el tipo de método que estamos utilizando para analizar la cadena. Si el método es ParseInt(), verifique que la cadena tenga un valor entero y de la misma manera para todos los demás métodos realice las comprobaciones necesarias.
Para evitar que un programa Java genere una excepción NumberFormatException, siempre es una buena práctica incluir las líneas de código que pueden generar esta excepción en un bloque try-catch como se muestra a continuación:
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 } } }