Výjimka NumberFormatException je vyvolána, když se pokoušíme převést řetězec na číselnou hodnotu, jako je float nebo integer, ale formát vstupního řetězce není vhodný nebo nezákonný. Nelegální formát znamená, že pokud se pokoušíte analyzovat řetězec na celé číslo, ale řetězec obsahuje booleovskou hodnotu, má neplatný formát. Například - pokud se pokusíme analyzovat řetězec na celé číslo, ale řetězec je null.
Je to nekontrolovaná výjimka. Je to podtřída IllegalArgumentException a implementuje Serializovatelné rozhraní.
Konstruktory NumberFormatException
Konstruktér | Popis |
---|---|
NumberFormatException() | Tím se vytvoří výjimka NumberFormatException bez specifikované podrobné zprávy. |
NumberFormatException(String s) | Tím se vytvoří NumberFormatException s podrobně specifikovanou zprávou v řetězcích s. |
Příklad 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. } }
Výstup:
Běžné důvody pro NumberFormatException
Vzhledem k tomu, že NumberFormatException nastává kvůli nevhodnému formátu řetězce pro odpovídající argument metody, která výjimku vyvolává, mohou existovat různé způsoby. Některé z nich jsou zmíněny následovně -
- Zadaný vstupní řetězec může být null-
Příklad- Integer.parseInt(null); - Vstupní řetězec může být prázdný -
Příklad- Integer.parseInt(''); - Vstupní řetězec může mít koncovou mezeru-
Příklad- Integer.parseInt('123'); - Vstupní řetězec může mít úvodní mezeru-
Příklad- Integer.parseInt(' 123'); - Vstupní řetězec může být alfanumerický
Příklad- Long.parseLong('b2'); - Vstupní řetězec může mít vstup, který může překročit rozsah datového typu ukládajícího analyzovaný řetězec-
Příklad- Integer.parseInt('135'); Maximální možná hodnota celého čísla může být 127, ale hodnota v řetězci je 135, což je mimo rozsah, takže to vyvolá výjimku. - Může existovat nesoulad mezi vstupním řetězcem a typem metody, která se používá pro analýzu. Pokud zadáte vstupní řetězec jako '1.0' a pokusíte se tento řetězec převést na celočíselnou hodnotu, vyvolá to výjimku NumberFormatException.
Příklad- Integer.parseInt('1..0');
Jak se vyhnout NumberFormatException?
Výjimka NumberFormatException je v podstatě způsobena tím, že vstupní řetězec není při analýze na číselnou hodnotu správně naformátován nebo je nelegální. Aby se předešlo této výjimce, musí být poskytnutý vstupní řetězec dobře naformátován.
Chcete-li mít platný a dobře naformátovaný řetězec, nejprve zkontrolujte, zda vstupní řetězec není null. Poté zkontrolujte, zda nejsou zbytečné mezery a poté je všechny ořízněte, poté proveďte několik kontrol, abyste ověřili, že řetězec argumentů odpovídá typu metody, kterou používáme pro analýzu řetězce. Pokud je metodou ParseInt(), zkontrolujte, zda má řetězec celočíselnou hodnotu, a podobně proveďte požadované kontroly u všech ostatních metod.
Aby se zabránilo programu Java ve generování NumberFormatException, je vždy dobrým zvykem uzavřít řádky kódu, které mohou tuto výjimku vyvolat v bloku try-catch, jak je znázorněno níže-
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 } } }