A NumberFormatException akkor jelenik meg, ha egy karakterláncot numerikus értékké próbálunk átalakítani, például float vagy integer, de a bemeneti karakterlánc formátuma nem megfelelő vagy illegális. Az illegális formátum alatt azt értjük, hogy ha egy karakterláncot egész számmá próbálunk elemezni, de a karakterlánc logikai értéket tartalmaz, akkor az illegális formátumú. Például - ha megpróbálunk egy karakterláncot egész számra elemezni, de a karakterlánc nulla.
Edith mack hirsch
Ez egy ellenőrizetlen kivétel. Ez egy alosztálya IllegalArgumentException és megvalósítja a Sorozatozható felület.
A NumberFormatException konstruktorai
Konstruktőr | Leírás |
---|---|
NumberFormatException() | Ez létrehoz egy NumberFormatException-t részletes üzenet nélkül. |
Számformátum kivétel (karakterláncok) | Ez létrehoz egy NumberFormatException-t egy részletes, meghatározott üzenettel az s karakterláncban. |
Példa a NumberFormatExceptionre
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. } }
Kimenet:
A NumberFormatException gyakori okai
Mivel a NumberFormatException a kivételt kiváltó metódus megfelelő argumentumához tartozó karakterlánc nem megfelelő formátuma miatt fordul elő, ennek többféle módja is lehet. Ezek közül néhányat az alábbiak szerint említünk meg:
- A megadott bemeneti karakterlánc lehet null-
Példa- Integer.parseInt(null); - Lehet, hogy a bemeneti karakterlánc üres -
Példa- Integer.parseInt(''); - Lehet, hogy a bemeneti karakterlánc végén szóköz van.
Példa- Integer.parseInt('123'); - Lehet, hogy a bemeneti karakterlánc kezdő szóközt tartalmaz-
Példa- Integer.parseInt(' 123'); - A bemeneti karakterlánc lehet alfanumerikus
Példa- Long.parseLong('b2'); - A bemeneti karakterláncnak lehet olyan bemenete, amely meghaladhatja az elemzett karakterláncot tároló adattípus tartományát.
Példa- Integer.parseInt('135'); Az egész szám maximális értéke 127 lehet, de a karakterlánc értéke 135, ami kívül esik a tartományon, így ez kivételt jelent. - Előfordulhat, hogy nem egyezik a bemeneti karakterlánc és az elemzéshez használt metódus típusa. Ha megadja a bemeneti karakterláncot, például az „1.0”-t, és megpróbálja ezt a karakterláncot egész értékké alakítani, akkor számformátum kivételt fog dobni.
Példa- Integer.parseInt('1..0');
Hogyan lehet elkerülni a NumberFormatException kivételt?
A NumberFormatException kivételt alapvetően az okozza, hogy a bemeneti karakterlánc nem jól formázott vagy illegális a számértékké történő elemzés során. Ezért a kivétel elkerülése érdekében a megadott bemeneti karakterláncot jól formázni kell.
Ahhoz, hogy érvényes és jól formázott karakterlánc legyen, mindenekelőtt ellenőrizze, hogy a bemeneti karakterlánc nem null-e. Ezután ellenőrizze a szükségtelen szóközöket, majd vágja le mindegyiket, majd többször is ellenőrizze, hogy az argumentum-karakterlánc megfelel-e annak a metódusnak, amelyet a karakterlánc elemzéséhez használunk. Ha a metódus a ParseInt(), ellenőrizze, hogy a karakterláncnak egész értéke van-e, és hasonlóképpen minden más metódusnál végezze el a szükséges ellenőrzéseket.
tat teljes formában
Annak megakadályozása érdekében, hogy egy Java program NumberFormatException-t generáljon, mindig jó gyakorlat, ha a kódsorokat, amelyek ezt a kivételt dobhatják, egy try-catch blokkba zárják, az alábbiak szerint.
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 } } }