logo

NumberFormatException i Java

NumberFormatException kastas när vi försöker konvertera en sträng till ett numeriskt värde som flytande eller heltal, men formatet på inmatningssträngen är inte lämpligt eller olagligt. Med olagligt format menas det att om du försöker tolka en sträng till ett heltal men strängen innehåller ett booleskt värde så är den av olagligt format. Till exempel - om vi försöker analysera en sträng till heltal men strängen är null.

Det är ett okontrollerat undantag. Det är en underklass av IllegalArgumentException och implementerar Serialiserbar gränssnitt.

Konstruktörer av NumberFormatException

Konstruktör Beskrivning
NumberFormatException() Detta skapar ett NumberFormatException utan något specificerat detaljerat meddelande.
NumberFormatException(String s) Detta konstruerar ett NumberFormatException med ett detaljerat specificerat meddelande i strängen s.

Exempel på 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. } } 

Produktion:

NumberFormatException i Java

Vanliga orsaker till NumberFormatException

Eftersom NumberFormatException uppstår på grund av det olämpliga strängformatet för motsvarande argument för metoden som skapar undantaget, kan det finnas olika sätt att göra det på. Några av dem nämns enligt följande-

  • Den angivna inmatningssträngen kan vara null-
    Exempel- Integer.parseInt(null);
  • Inmatningssträngen kan vara tom-
    Exempel- Integer.parseInt('');
  • Inmatningssträngen kan ha efterföljande mellanslag-
    Exempel- Integer.parseInt('123');
  • Inmatningssträngen kan ha ett ledande mellanslag-
    Exempel- Integer.parseInt(' 123');
  • Inmatningssträngen kan vara alfanumerisk-
    Exempel- Long.parseLong('b2');
  • Inmatningssträngen kan ha en ingång som kan överskrida intervallet för datatypen som lagrar den analyserade strängen-
    Exempel- Integer.parseInt('135'); Det maximala möjliga värdet för heltal kan vara 127, men värdet i strängen är 135 vilket är utanför intervallet, så detta kommer att kasta undantaget.
  • Det kan finnas en oöverensstämmelse mellan inmatningssträngen och typen av metod som används för att analysera. Om du anger indatasträngen som '1.0' och du försöker konvertera den här strängen till ett heltalsvärde, kommer det att skapa ett NumberFormatException-undantag.
    Exempel- Integer.parseInt('1..0');

Hur undviker man NumberFormatException?

NumberFormatException beror i grunden på att indatasträngen inte är välformaterad eller olaglig när den analyseras till ett numeriskt värde. Så för att undvika detta undantag måste inmatningssträngen vara väl formaterad.

För att ha en giltig och välformaterad sträng, kontrollera först och främst om inmatningssträngen inte är null. Kontrollera sedan om det finns onödiga mellanslag och klipp bort dem alla efter att ha flera kontroller för att verifiera att argumentsträngen matchar typen av metod som vi använder för att analysera strängen. Om metoden är ParseInt(), kontrollera att strängen har ett heltalsvärde och gör på samma sätt de nödvändiga kontrollerna för alla andra metoder.

För att förhindra att ett Java-program genererar ett NumberFormatException är det alltid en god praxis att bifoga kodraderna som kan kasta detta undantag i ett try-catch-block som visas nedan-

 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 } } }