NumberFormatException heitetään, kun yritämme muuntaa merkkijonon numeeriseksi arvoksi, kuten float tai kokonaisluku, mutta syötemerkkijonon muoto ei ole sopiva tai laiton. Laittomalla muodolla tarkoitetaan, että jos yrität jäsentää merkkijonoa kokonaisluvuksi, mutta merkkijono sisältää loogisen arvon, se on laittomassa muodossa. Esimerkiksi - jos yritämme jäsentää merkkijonon kokonaisluvuksi, mutta merkkijono on tyhjä.
Se on tarkistamaton poikkeus. Se on alaluokka IllegalArgumentException ja toteuttaa Sarjasoitavissa käyttöliittymä.
NumberFormatExceptionin rakentajat
Rakentaja | Kuvaus |
---|---|
NumberFormatException() | Tämä muodostaa NumberFormatExceptionin ilman määriteltyä yksityiskohtaista viestiä. |
Numeromuodon poikkeus(merkkijonot) | Tämä muodostaa NumberFormatExceptionin, jossa on yksityiskohtaisesti määritetty viesti merkkijonossa s. |
Esimerkki NumberFormatExceptionista
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. } }
Lähtö:
Yleisiä syitä NumberFormatExceptionille
Koska NumberFormatException johtuu sopimattomasta merkkijonomuodosta poikkeuksen tekevän menetelmän vastaavalle argumentille, siihen voi olla useita tapoja. Muutama niistä mainitaan seuraavasti:
- Annettu syöttömerkkijono voi olla tyhjä-
Esimerkki- Integer.parseInt(null); - Syöttömerkkijono voi olla tyhjä -
Esimerkki- Integer.parseInt(''); - Syöttömerkkijonossa saattaa olla lopussa välilyönti
Esimerkki- Integer.parseInt('123'); - Syöttömerkkijonossa saattaa olla alkuvälilyönti
Esimerkki- Integer.parseInt(' 123'); - Syöttömerkkijono voi olla aakkosnumeerinen -
Esimerkki- Long.parseLong('b2'); - Syöttömerkkijonossa voi olla syöte, joka saattaa ylittää jäsennetyn merkkijonon tallentavan tietotyypin alueen.
Esimerkki- Integer.parseInt('135'); Kokonaisluvun suurin mahdollinen arvo voi olla 127, mutta merkkijonon arvo on 135, mikä on alueen ulkopuolella, joten tämä tekee poikkeuksen. - Syöttömerkkijonon ja jäsennykseen käytetyn menetelmän tyypin välillä voi olla ristiriita. Jos annat syötemerkkijonon, kuten '1.0', ja yrität muuntaa tämän merkkijonon kokonaislukuarvoksi, se antaa NumberFormatException-poikkeuksen.
Esimerkki- Integer.parseInt('1..0');
Kuinka välttää NumberFormatException?
NumberFormatException johtuu periaatteessa siitä, että syötemerkkijono ei ole hyvin muotoiltu tai se on laiton jäsennettäessä numeroarvoksi. Joten tämän poikkeuksen välttämiseksi syötetyn merkkijonon on oltava hyvin muotoiltu.
Jotta merkkijono olisi kelvollinen ja hyvin muotoiltu, tarkista ensin, ettei syöte ole tyhjä. Tarkista sitten tarpeettomat välilyönnit ja leikkaa ne kaikki pois, minkä jälkeen tee useita tarkistuksia varmistaaksesi, että argumenttijono vastaa sen menetelmän tyyppiä, jota käytämme merkkijonon jäsentämiseen. Jos menetelmä on ParseInt(), tarkista, että merkkijonolla on kokonaislukuarvo ja tee samoin kaikille muille menetelmille vaaditut tarkistukset.
Jotta Java-ohjelma ei luo NumberFormatExceptionia, on aina hyvä käytäntö sulkea koodirivit, jotka voivat heittää tämän poikkeuksen try-catch-lohkoon alla olevan kuvan mukaisesti.
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 } } }