NumberFormatException este aruncată atunci când încercăm să convertim un șir într-o valoare numerică, cum ar fi float sau integer, dar formatul șirului de intrare nu este adecvat sau ilegal. Prin format ilegal, se înțelege că, dacă încercați să analizați un șir într-un număr întreg, dar șirul conține o valoare booleană, acesta este de format ilegal. De exemplu, dacă încercăm să analizăm un șir la un întreg, dar șirul este nul.
Este o excepție neverificată. Este o subclasă a IllegalArgumentException și implementează Serializabil interfata.
Constructorii NumberFormatException
Constructor | Descriere |
---|---|
NumberFormatException() | Aceasta construiește o excepție NumberFormatException fără mesaj detaliat specificat. |
NumberFormatException (șir de caractere) | Aceasta construiește o excepție NumberFormatException cu un mesaj detaliat specificat în șirul s. |
Exemplu 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. } }
Ieșire:
Motive comune pentru NumberFormatException
Deoarece NumberFormatException apare din cauza formatului inadecvat al șirului de caractere pentru argumentul corespunzător al metodei care aruncă excepția, pot exista diverse moduri de a face excepția. Câteva dintre ele sunt menționate după cum urmează -
- Șirul de intrare furnizat poate fi nul-
Exemplu- Integer.parseInt(null); - Șirul de intrare ar putea fi gol-
Exemplu- Integer.parseInt(''); - Șirul de intrare ar putea avea spațiu în urmă -
Exemplu- Integer.parseInt('123'); - Șirul de intrare ar putea avea un spațiu de început -
Exemplu- Integer.parseInt(' 123'); - Șirul de intrare poate fi alfanumeric-
Exemplu- Long.parseLong('b2'); - Șirul de intrare poate avea o intrare care ar putea depăși intervalul tipului de date care stochează șirul analizat-
Exemplu- Integer.parseInt('135'); Valoarea maximă posibilă a întregului poate fi 127, dar valoarea din șir este 135, care este în afara intervalului, așa că aceasta va arunca excepția. - Poate exista o nepotrivire între șirul de intrare și tipul metodei care este utilizată pentru parsare. Dacă furnizați șirul de intrare ca „1.0” și încercați să convertiți acest șir într-o valoare întreagă, va arunca o excepție NumberFormatException.
Exemplu- Integer.parseInt('1..0');
Cum să evitați NumberFormatException?
NumberFormatException este cauzată în principiu deoarece șirul de intrare nu este bine formatat sau ilegal în timpul analizării într-o valoare numerică. Deci, pentru a evita această excepție, șirul de intrare furnizat trebuie să fie bine formatat.
Pentru a avea un șir valid și bine formatat, în primul rând, verificați dacă șirul de intrare nu este nul. Apoi, verificați dacă există spații inutile și decupați-le pe toate, după care puneți mai multe verificări pentru a verifica dacă șirul de argument se potrivește cu tipul metodei pe care o folosim pentru a analiza șirul. Dacă metoda este ParseInt(), verificați dacă șirul are o valoare întreagă și, de asemenea, pentru toate celelalte metode, faceți verificările necesare.
Pentru a preveni ca un program Java să genereze o excepție NumberFormatException, este întotdeauna o practică bună să includeți liniile de cod care pot arunca această excepție într-un bloc try-catch, așa cum se arată mai jos -
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 } } }