NumberFormatException išmetamas, kai bandome paversti eilutę į skaitinę reikšmę, pvz., plūduriuojančią ar sveiką skaičių, tačiau įvesties eilutės formatas nėra tinkamas arba neteisėtas. Neteisėtas formatas reiškia, kad jei bandote išanalizuoti eilutę iki sveikojo skaičiaus, bet eilutėje yra loginė reikšmė, ji yra neteisėto formato. Pavyzdžiui, jei bandome išanalizuoti eilutę iki sveikojo skaičiaus, bet eilutė yra nulinė.
Tai nekontroliuojama išimtis. Tai yra poklasis IllegalArgumentException ir įgyvendina Serializuojama sąsaja.
NumberFormatException konstruktoriai
Konstruktorius | apibūdinimas |
---|---|
NumberFormatException() | Taip sukuriama NumberFormatException be jokio nurodyto išsamaus pranešimo. |
Skaičiaus formato išimtis (eilutės) | Taip sukuriama NumberFormatException su išsamiu nurodytu pranešimu eilutėje s. |
NumberFormatException pavyzdys
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. } }
Išvestis:
Dažnos NumberFormatException priežastys
Kadangi NumberFormatException atsiranda dėl netinkamo eilutės formato atitinkamam metodo argumentui, kuris meta išimtį, gali būti įvairių būdų. Kai kurie iš jų paminėti taip:
- Pateikta įvesties eilutė gali būti nulinė
Pavyzdys- Integer.parseInt(null); - Įvesties eilutė gali būti tuščia -
Pavyzdys- Integer.parseInt(''); - Įvesties eilutėje gali būti tarpas -
Pavyzdys- Integer.parseInt('123'); - Įvesties eilutėje gali būti tarpas priekyje -
Pavyzdys- Integer.parseInt(' 123'); - Įvesties eilutė gali būti raidinė ir skaitmeninė
Pavyzdys- Long.parseLong('b2'); - Įvesties eilutėje gali būti įvestis, kuri gali viršyti duomenų tipo diapazoną, kuriame saugoma išanalizuota eilutė.
Pavyzdys- Integer.parseInt('135'); Didžiausia galima sveikojo skaičiaus reikšmė gali būti 127, tačiau eilutėje esanti reikšmė yra 135, kuri yra už diapazono ribų, todėl tai padarys išimtį. - Gali būti neatitikimas tarp įvesties eilutės ir metodo, kuris naudojamas analizuojant, tipo. Jei pateiksite įvesties eilutę, pvz., „1.0“, ir bandysite konvertuoti šią eilutę į sveikąjį skaičių, bus pateikta „NumberFormatException“ išimtis.
Pavyzdys- Integer.parseInt('1..0');
Kaip išvengti NumberFormatException?
NumberFormatException iš esmės atsiranda dėl to, kad įvesties eilutė nėra gerai suformatuota arba neteisėta analizuojant į skaitinę reikšmę. Taigi, norint išvengti šios išimties, pateikta įvesties eilutė turi būti gerai suformatuota.
Norėdami turėti tinkamą ir gerai suformatuotą eilutę, pirmiausia patikrinkite, ar įvesties eilutė nėra nulinė. Tada patikrinkite, ar nėra nereikalingų tarpų, ir iškirpkite juos visus po to atlikite kelis patikrinimus, kad įsitikintumėte, jog argumentų eilutė atitinka metodo, kurį naudojame eilui analizuoti, tipą. Jei metodas yra ParseInt(), patikrinkite, ar eilutė turi sveikąjį skaičių, ir taip pat atlikite reikiamus patikrinimus visiems kitiems metodams.
Kad Java programa nesukurtų NumberFormatException, visada yra gera praktika įtraukti kodo eilutes, kurios gali išmesti šią išimtį try-catch bloke, kaip parodyta toliau.
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 } } }