De NumberFormatException wordt gegenereerd wanneer we proberen een tekenreeks om te zetten in een numerieke waarde, zoals float of integer, maar het formaat van de invoertekenreeks is niet geschikt of illegaal. Met illegaal formaat wordt bedoeld dat als u een string probeert te parseren naar een geheel getal, maar de String een Booleaanse waarde bevat, deze een illegaal formaat heeft. Als we bijvoorbeeld een string proberen te parseren naar een geheel getal, maar de string is nul.
Het is een ongecontroleerde uitzondering. Het is een subklasse van Illegale ArgumentException en implementeert de Serialiseerbaar koppel.
Constructeurs van NumberFormatException
Constructeur | Beschrijving |
---|---|
NumberFormatException() | Hiermee wordt een NumberFormatException geconstrueerd zonder gespecificeerd gedetailleerd bericht. |
NumberFormatException(Strings) | Hiermee wordt een NumberFormatException geconstrueerd met een gedetailleerd gespecificeerd bericht in tekenreeks s. |
Voorbeeld van 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. } }
Uitgang:
Veelvoorkomende redenen voor NumberFormatException
Omdat NumberFormatException optreedt vanwege het ongepaste formaat van de tekenreeks voor het overeenkomstige argument van de methode die de uitzondering genereert, kunnen er verschillende manieren zijn. Een paar van hen worden als volgt genoemd:
- De opgegeven invoertekenreeks is mogelijk nul-
Voorbeeld- Geheel getal.parseInt(null); - De invoertekenreeks is mogelijk leeg-
Voorbeeld- Geheel getal.parseInt(''); - De invoertekenreeks bevat mogelijk een spatie-
Voorbeeld- Geheel getal.parseInt('123'); - De invoertekenreeks heeft mogelijk een voorloopspatie-
Voorbeeld- Geheel getal.parseInt(' 123'); - De invoerreeks kan alfanumeriek zijn
Voorbeeld- Lang.parseLong('b2'); - De invoerreeks kan een invoer hebben die het bereik overschrijdt van het gegevenstype waarin de geparseerde tekenreeks is opgeslagen.
Voorbeeld- Geheel getal.parseInt('135'); De maximaal mogelijke waarde van geheel getal kan 127 zijn, maar de waarde in de string is 135, wat buiten bereik ligt, dus dit zal de uitzondering opleveren. - Er is mogelijk een discrepantie tussen de invoerreeks en het type methode dat voor het parseren wordt gebruikt. Als u de invoertekenreeks zoals '1.0' opgeeft en deze tekenreeks probeert om te zetten in een geheel getal, wordt er een NumberFormatException-uitzondering gegenereerd.
Voorbeeld- Integer.parseInt('1..0');
Hoe NumberFormatException vermijden?
De NumberFormatException wordt in principe veroorzaakt doordat de invoertekenreeks niet goed is opgemaakt of illegaal is tijdens het parseren naar een numerieke waarde. Om deze uitzondering te voorkomen, moet de opgegeven invoerreeks dus goed zijn opgemaakt.
Om een geldige en goed opgemaakte tekenreeks te hebben, moet u eerst controleren of de invoertekenreeks niet nul is. Controleer vervolgens op onnodige spaties en verwijder ze allemaal. Voer vervolgens verschillende controles uit om te verifiëren dat de argumentreeks overeenkomt met het type methode dat we gebruiken voor het parseren van de tekenreeks. Als de methode ParseInt() is, controleer dan of de string een gehele waarde heeft en voer op dezelfde manier voor alle andere methoden de vereiste controles uit.
Om te voorkomen dat een Java-programma een NumberFormatException genereert, is het altijd een goede gewoonte om de coderegels die deze uitzondering kunnen genereren, in een try-catch-blok te plaatsen, zoals hieronder weergegeven:
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 } } }