NumberFormatException נזרק כאשר אנו מנסים להמיר מחרוזת לערך מספרי כגון float או שלם, אך הפורמט של מחרוזת הקלט אינו מתאים או לא חוקי. בפורמט לא חוקי, הכוונה היא שאם אתה מנסה לנתח מחרוזת למספר שלם אבל המחרוזת מכילה ערך בוליאני, היא בפורמט לא חוקי. למשל - אם ננסה לנתח מחרוזת למספר שלם אבל המחרוזת היא null.
זה חריג לא מסומן. זה תת-מעמד של חריג טיעון לא חוקי ומיישם את ניתן להסדרה מִמְשָׁק.
בנאים של NumberFormatException
בַּנַאִי | תיאור |
---|---|
NumberFormatException() | פעולה זו בונה NumberFormatException ללא הודעה מפורטת. |
NumberFormatException(String s) | זה בונה NumberFormatException עם הודעה שצוינה מפורטת במחרוזת s. |
דוגמה ל- 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. } }
תְפוּקָה:
סיבות נפוצות ל- NumberFormatException
מכיוון ש-NumberFormatException מתרחשת עקב הפורמט הלא מתאים של מחרוזת עבור הארגומנט המקביל של השיטה שזורקת את החריג, יכולות להיות דרכים שונות לעשות זאת. כמה מהם מוזכרים כדלקמן-
- מחרוזת הקלט שסופקה עשויה להיות null-
דוגמא- Integer.parseInt(null); - מחרוזת הקלט עשויה להיות ריקה-
דוגמא- Integer.parseInt(''); - ייתכן שלמחרוזת הקלט יש רווח עוקב-
דוגמא- Integer.parseInt('123'); - ייתכן שלמחרוזת הקלט יש רווח מוביל-
דוגמא- Integer.parseInt(' 123'); - מחרוזת הקלט עשויה להיות אלפאנומרי-
דוגמא- Long.parseLong('b2'); - למחרוזת הקלט עשויה להיות קלט שעשוי לחרוג מהטווח של סוג הנתונים המאחסן את המחרוזת המנתחת-
דוגמא- Integer.parseInt('135'); הערך המקסימלי האפשרי של מספר שלם יכול להיות 127, אבל הערך במחרוזת הוא 135 שהוא מחוץ לטווח, אז זה יזרוק את החריג. - ייתכן שיש אי התאמה בין מחרוזת הקלט לסוג השיטה המשמשת לניתוח. אם תספק את מחרוזת הקלט כמו '1.0' ותנסה להמיר מחרוזת זו לערך שלם, היא תזרוק חריג NumberFormatException.
דוגמא- Integer.parseInt('1..0');
כיצד להימנע מ- NumberFormatException?
ה-NumberFormatException נגרמת בעצם מכיוון שמחרוזת הקלט אינה מעוצבת היטב או לא חוקית בזמן ניתוח לערך מספרי. לכן, כדי למנוע חריג זה, מחרוזת הקלט שסופקה צריכה להיות מעוצבת היטב.
כדי לקבל מחרוזת חוקית ומעוצבת היטב, קודם כל, בדוק אם מחרוזת הקלט אינה null. לאחר מכן, בדוק אם יש רווחים מיותרים וקצץ את כולם לאחר מכן שים מספר בדיקות כדי לוודא שמחרוזת הארגומנטים תואמת לסוג השיטה שבה אנו משתמשים לניתוח המחרוזת. אם השיטה היא ParseInt(), בדוק שלמחרוזת יש ערך שלם וכמו כן עבור כל שאר המתודות בצע את הבדיקות הנדרשות.
על מנת למנוע מתוכנת Java לייצר NumberFormatException, זה תמיד נוהג טוב לצרף את שורות הקוד שיכולות לזרוק את החריג הזה בבלוק try-catch כפי שמוצג להלן-
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 } } }