logo

NumberFormatException в Java

Изключението NumberFormatException се хвърля, когато се опитваме да преобразуваме низ в числова стойност, като например плаващо или цяло число, но форматът на входния низ не е подходящ или незаконен. Под незаконен формат се има предвид, че ако се опитвате да анализирате низ до цяло число, но низът съдържа булева стойност, той е в незаконен формат. Например - ако се опитаме да анализираме низ до цяло число, но низът е нула.

Това е непроверено изключение. Това е подклас на 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. } } 

Изход:

arraylist в java
NumberFormatException в Java

Често срещани причини за 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, както е показано по-долу-

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