Výnimka NumberFormatException je vyvolaná, keď sa pokúšame konvertovať reťazec na číselnú hodnotu, ako je float alebo integer, ale formát vstupného reťazca nie je vhodný alebo nezákonný. Nelegálny formát znamená, že ak sa pokúšate analyzovať reťazec na celé číslo, ale reťazec obsahuje boolovskú hodnotu, má neplatný formát. Napríklad - ak sa pokúsime analyzovať reťazec na celé číslo, ale reťazec je null.
Je to nekontrolovaná výnimka. Je to podtrieda IllegalArgumentException a implementuje Serializovateľné rozhranie.
Konštruktory NumberFormatException
Konštruktér | Popis |
---|---|
NumberFormatException() | Toto vytvorí výnimku NumberFormatException bez špecifikovanej podrobnej správy. |
NumberFormatException(String s) | Toto vytvorí výnimku NumberFormatException s podrobne špecifikovanou správou v reťazci s. |
Prí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ýkon:
Bežné dôvody pre NumberFormatException
Keďže NumberFormatException sa vyskytuje v dôsledku nevhodného formátu reťazca pre zodpovedajúci argument metódy, ktorá vyvoláva výnimku, môžu existovať rôzne spôsoby. Niektoré z nich sú spomenuté nasledovne -
- Zadaný vstupný reťazec môže byť null-
Príklad- Integer.parseInt(null); - Vstupný reťazec môže byť prázdny -
Príklad- Integer.parseInt(''); - Vstupný reťazec môže mať koncovú medzeru-
Príklad- Integer.parseInt('123'); - Vstupný reťazec môže mať úvodnú medzeru-
Príklad- Integer.parseInt(' 123'); - Vstupný reťazec môže byť alfanumerický
Príklad- Long.parseLong('b2'); - Vstupný reťazec môže mať vstup, ktorý môže prekročiť rozsah dátového typu, v ktorom je uložený analyzovaný reťazec-
Príklad- Integer.parseInt('135'); Maximálna možná hodnota celého čísla môže byť 127, ale hodnota v reťazci je 135, čo je mimo rozsahu, takže toto vyvolá výnimku. - Môže existovať nesúlad medzi vstupným reťazcom a typom metódy, ktorá sa používa na analýzu. Ak zadáte vstupný reťazec ako '1.0' a pokúsite sa previesť tento reťazec na celočíselnou hodnotu, vyvolá to výnimku NumberFormatException.
Príklad- Integer.parseInt('1..0');
Ako sa vyhnúť výnimke NumberFormatException?
Výnimka NumberFormatException je v podstate spôsobená tým, že vstupný reťazec nie je dobre naformátovaný alebo nezákonný pri analýze na číselnú hodnotu. Aby sa predišlo tejto výnimke, poskytnutý vstupný reťazec musí byť dobre naformátovaný.
Ak chcete mať platný a dobre naformátovaný reťazec, najskôr skontrolujte, či vstupný reťazec nie je nulový. Potom skontrolujte, či nie sú zbytočné medzery a potom ich všetky orezajte, potom vykonajte niekoľko kontrol, aby ste overili, či sa reťazec argumentov zhoduje s typom metódy, ktorú používame na analýzu reťazca. Ak je metódou ParseInt(), skontrolujte, či reťazec má celočíselnou hodnotu a podobne vykonajte požadované kontroly pre všetky ostatné metódy.
Aby sa zabránilo programu Java vygenerovať výnimku NumberFormatException, je vždy dobrým zvykom uzavrieť riadky kódu, ktoré môžu vyvolať túto výnimku do bloku try-catch, ako je znázornené nižšie-
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 } } }