L'excepció NumberFormatException es llança quan intentem convertir una cadena en un valor numèric com ara flotant o enter, però el format de la cadena d'entrada no és adequat o il·legal. Per format il·legal, vol dir que si esteu intentant analitzar una cadena a un nombre enter però la cadena conté un valor booleà, és de format il·legal. Per exemple, si intentem analitzar una cadena a un nombre enter però la cadena és nul·la.
És una excepció no marcada. És una subclasse de IllegalArgumentException i implementa el Serialitzable interfície.
Constructors de NumberFormatException
Constructor | Descripció |
---|---|
NumberFormatException () | Això construeix una NumberFormatException sense cap missatge detallat especificat. |
NumberFormatException(String s) | Això construeix una NumberFormatException amb un missatge especificat detallat a la cadena s. |
Exemple 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. } }
Sortida:
Motius habituals de NumberFormatException
Com que NumberFormatException es produeix a causa del format inadequat de cadena per a l'argument corresponent del mètode que està llançant l'excepció, hi pot haver diverses maneres. Alguns d'ells s'esmenten de la següent manera:
- La cadena d'entrada proporcionada pot ser nul-
Exemple- Integer.parseInt(null); - La cadena d'entrada pot estar buida-
Exemple- Integer.parseInt(''); - La cadena d'entrada pot tenir espai al final-
Exemple- Integer.parseInt('123'); - La cadena d'entrada pot tenir un espai inicial:
Exemple- Integer.parseInt(' 123'); - La cadena d'entrada pot ser alfanumèrica-
Exemple- Long.parseLong('b2'); - La cadena d'entrada pot tenir una entrada que pot superar l'interval del tipus de dades que emmagatzema la cadena analitzada.
Exemple- Integer.parseInt('135'); El valor màxim possible de l'enter pot ser 127, però el valor de la cadena és 135, que està fora de l'interval, de manera que això generarà l'excepció. - Pot haver-hi una discrepància entre la cadena d'entrada i el tipus de mètode que s'utilitza per analitzar. Si proporcioneu la cadena d'entrada com '1.0' i intenteu convertir aquesta cadena en un valor enter, es produirà una excepció NumberFormatException.
Exemple- Integer.parseInt('1..0');
Com evitar NumberFormatException?
L'excepció NumberFormatException es produeix bàsicament perquè la cadena d'entrada no està ben formatada o és il·legal mentre s'analitza en un valor numèric. Per tant, per evitar aquesta excepció, la cadena d'entrada proporcionada ha d'estar ben formatada.
Per tenir una cadena vàlida i ben formatada, primer de tot, comproveu si la cadena d'entrada no és nul·la. A continuació, comproveu si hi ha espais innecessaris i retalleu-los tots després de fer diverses comprovacions per verificar que la cadena d'argument coincideix amb el tipus de mètode que estem utilitzant per analitzar la cadena. Si el mètode és ParseInt(), comproveu que la cadena té un valor enter i, de la mateixa manera, per a tots els altres mètodes, feu les comprovacions necessàries.
Per evitar que un programa Java generi una NumberFormatException, sempre és una bona pràctica incloure les línies de codi que poden llançar aquesta excepció en un bloc try-catch tal com es mostra a continuació:
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 } } }