La NumberFormatException viene lanciata quando proviamo a convertire una stringa in un valore numerico come float o intero, ma il formato della stringa di input non è appropriato o illegale. Per formato illegale si intende che se si sta tentando di analizzare una stringa in un numero intero ma la stringa contiene un valore booleano, il formato è illegale. Ad esempio, se proviamo ad analizzare una stringa in intero ma la stringa è nulla.
È un'eccezione non controllata. È una sottoclasse di IllegalArgumentException e implementa il Serializzabile interfaccia.
Costruttori di NumberFormatException
Costruttore | Descrizione |
---|---|
NumberFormatException() | Questo costruisce una NumberFormatException senza un messaggio dettagliato specificato. |
NumberFormatException(String s) | Questo costruisce una NumberFormatException con un messaggio specificato dettagliato nella stringa s. |
Esempio di 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. } }
Produzione:
installa Maven
Motivi comuni per NumberFormatException
Poiché NumberFormatException si verifica a causa del formato inappropriato della stringa per l'argomento corrispondente del metodo che lancia l'eccezione, possono esserci vari modi per farlo. Alcuni di loro sono menzionati come segue-
- La stringa di input fornita potrebbe essere null-
Esempio- Intero.parseInt(null); - La stringa di input potrebbe essere vuota-
Esempio- Intero.parseInt(''); - La stringa di input potrebbe contenere uno spazio finale-
Esempio- Integer.parseInt('123'); - La stringa di input potrebbe avere uno spazio iniziale-
Esempio- Intero.parseInt(' 123'); - La stringa di input può essere alfanumerica-
Esempio- Long.parseLong('b2'); - La stringa di input potrebbe avere un input che potrebbe superare l'intervallo del tipo di dati che memorizza la stringa analizzata.
Esempio- Integer.parseInt('135'); Il valore massimo possibile dell'intero può essere 127, ma il valore nella stringa è 135 che è fuori intervallo, quindi genererà un'eccezione. - Potrebbe esserci una mancata corrispondenza tra la stringa di input e il tipo del metodo utilizzato per l'analisi. Se fornisci la stringa di input come '1.0' e provi a convertire questa stringa in un valore intero, verrà generata un'eccezione NumberFormatException.
Esempio- Integer.parseInt('1..0');
Come evitare NumberFormatException?
La NumberFormatException è fondamentalmente causata dal fatto che la stringa di input non è ben formattata o non è valida durante l'analisi in un valore numerico. Quindi, per evitare questa eccezione, la stringa di input fornita deve essere ben formattata.
Per avere una stringa valida e ben formattata, prima di tutto, controlla se la stringa di input non è nulla. Quindi, controlla gli spazi non necessari e ritagliali tutti, quindi esegui diversi controlli per verificare che la stringa dell'argomento corrisponda al tipo del metodo che stiamo utilizzando per analizzare la stringa. Se il metodo è ParseInt(), controlla che la stringa abbia un valore intero e allo stesso modo per tutti gli altri metodi fai i controlli richiesti.
Per impedire a un programma Java di generare una NumberFormatException, è sempre buona norma racchiudere le righe di codice che possono generare questa eccezione in un blocco try-catch come mostrato di seguito:
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 } } }