Виняток NumberFormatException виникає, коли ми намагаємося перетворити рядок на числове значення, наприклад float або integer, але формат вхідного рядка є невідповідним або незаконним. Під недопустимим форматом мається на увазі, що якщо ви намагаєтеся розібрати рядок до цілого числа, але рядок містить логічне значення, це означає, що він має неприпустимий формат. Наприклад, якщо ми намагаємося розібрати рядок до цілого числа, але рядок є нульовим.
Це неперевірений виняток. Це підклас IllegalArgumentException і реалізує Серіалізований інтерфейс.
Конструктори 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 виникає через невідповідний формат рядка для відповідного аргументу методу, який викликає виняток, це може бути різними способами. Деякі з них згадуються наступним чином-
- Наданий рядок введення може бути нульовим.
приклад- 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 в основному спричинений тим, що вхідний рядок неправильно відформатований або недопустимий під час аналізу в числове значення. Отже, щоб уникнути цього винятку, наданий вхідний рядок має бути добре відформатований.
Щоб мати дійсний і добре відформатований рядок, перш за все перевірте, чи вхідний рядок не є нульовим. Потім перевірте наявність непотрібних пробілів і видаліть їх усі, після чого зробіть кілька перевірок, щоб переконатися, що рядок аргументу відповідає типу методу, який ми використовуємо для аналізу рядка. Якщо це метод ParseInt(), перевірте, чи рядок має ціле значення, а також виконайте необхідні перевірки для всіх інших методів.
Щоб запобігти генеруванню програмою Java винятку NumberFormatException, завжди доцільно вкладати рядки коду, які можуть викинути цю виняток, у блок try-catch, як показано нижче-
git rebase
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 } } }