Wyjątek NumberFormatException jest zgłaszany, gdy próbujemy przekonwertować ciąg na wartość liczbową, taką jak liczba zmiennoprzecinkowa lub liczba całkowita, ale format ciągu wejściowego jest nieodpowiedni lub nielegalny. Przez nieprawidłowy format rozumie się, że jeśli próbujesz przeanalizować ciąg znaków na liczbę całkowitą, ale ciąg znaków zawiera wartość logiczną, oznacza to, że ma on nieprawidłowy format. Na przykład - jeśli próbujemy przeanalizować ciąg znaków na liczbę całkowitą, ale ciąg ma wartość null.
Jest to niesprawdzony wyjątek. Jest to podklasa Wyjątek IllegalArgument i realizuje Możliwość serializacji interfejs.
Konstruktory NumberFormatException
Konstruktor | Opis |
---|---|
NumberFormatException() | Spowoduje to utworzenie wyjątku NumberFormatException bez określonego szczegółowego komunikatu. |
NumberFormatException (Ciąg s) | Konstruuje to wyjątek NumberFormatException ze szczegółowo określonym komunikatem w ciągu s. |
Przykład wyjątku 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. } }
Wyjście:
Typowe przyczyny wyjątku NumberFormatException
Ponieważ wyjątek NumberFormatException występuje z powodu niewłaściwego formatu ciągu odpowiadającego argumentowi metody zgłaszającej wyjątek, można to zrobić na różne sposoby. Kilka z nich jest wymienionych w następujący sposób:
- Podany ciąg wejściowy może mieć wartość null-
Przykład- Liczba całkowita.parseInt(null); - Ciąg wejściowy może być pusty-
Przykład- Liczba całkowita.parseInt(''); - Ciąg wejściowy może mieć końcową spację-
Przykład- Liczba całkowita.parseInt('123'); - Ciąg wejściowy może mieć wiodącą spację-
Przykład- Liczba całkowita.parseInt(' 123'); - Ciąg wejściowy może być alfanumeryczny-
Przykład- Long.parseLong('b2'); - Ciąg wejściowy może mieć wejście, które może przekraczać zakres typu danych przechowującego analizowany ciąg znaków-
Przykład- Liczba całkowita.parseInt('135'); Maksymalna możliwa wartość liczby całkowitej może wynosić 127, ale wartość w ciągu wynosi 135, co jest poza zakresem, więc spowoduje to zgłoszenie wyjątku. - Może występować niezgodność między ciągiem wejściowym a typem metody używanej do analizowania. Jeśli podasz ciąg wejściowy, taki jak „1.0”, i spróbujesz przekonwertować ten ciąg na wartość całkowitą, zgłosi wyjątek NumberFormatException.
Przykład- Liczba całkowita.parseInt('1..0');
Jak uniknąć wyjątku NumberFormatException?
Wyjątek NumberFormatException jest zasadniczo spowodowany tym, że ciąg wejściowy nie jest dobrze sformatowany lub jest nielegalny podczas analizowania wartości liczbowej. Aby więc uniknąć tego wyjątku, podany ciąg wejściowy musi być dobrze sformatowany.
Aby uzyskać poprawny i dobrze sformatowany ciąg znaków, przede wszystkim sprawdź, czy ciąg wejściowy nie jest pusty. Następnie sprawdź, czy nie ma niepotrzebnych spacji i usuń je wszystkie, a następnie wykonaj kilka kontroli, aby sprawdzić, czy ciąg argumentów odpowiada typowi metody, której używamy do analizowania ciągu. Jeśli metodą jest ParseInt(), sprawdź, czy ciąg ma wartość całkowitą i podobnie w przypadku wszystkich innych metod wykonaj wymagane kontrole.
Aby zapobiec generowaniu przez program Java wyjątku NumberFormatException, zawsze dobrą praktyką jest łączenie wierszy kodu, które mogą zgłosić ten wyjątek, w bloku try-catch, jak pokazano poniżej:
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 } } }