1. Введение
Java выдает NumberFormatException — непроверенное исключение — когда не может преобразовать String в числовой тип.
Поскольку он не отмечен, Java не заставляет нас обрабатывать или объявлять его.
В этом кратком руководстве мы опишем и продемонстрируем, что вызывает исключение NumberFormatException в Java и как его избежать или как справиться с этим .
NumberFormatException вызывают различные проблемы . Например, некоторые конструкторы и методы в Java вызывают это исключение.
Мы обсудим большинство из них в следующих разделах.
2.1. Нечисловые данные, передаваемые в конструктор
Давайте посмотрим на попытку построить объект Integer или Double с нечисловыми данными.
Оба этих оператора вызовут исключение NumberFormatException :
Integer aIntegerObj = new Integer("one"); Double doubleDecimalObj = new Double("two.2");
Давайте посмотрим на трассировку стека, которую мы получили, когда передали недопустимый ввод «one» в конструктор Integer в строке 1:
Exception in thread "main" java.lang.NumberFormatException: For input string: "one" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.(Integer.java:867) at MainClass.main(MainClass.java:11)
Это вызвало исключение NumberFormatException . Конструктору Integer не удалось внутренне понять ввод с помощью parseInt () .
Java Number API не разбирает слова на числа, поэтому мы можем исправить код, просто изменив его на ожидаемое значение:
Integer aIntegerObj = new Integer("1"); Double doubleDecimalObj = new Double("2.2");
2.2. Анализ строк, содержащих нечисловые данные
Подобно поддержке синтаксического анализа в конструкторе Java, у нас есть специальные методы синтаксического анализа, такие как par seInt (), parseDouble (), valueOf () и decode () .
Если мы попробуем сделать такие же преобразования с помощью этих:
int aIntPrim = Integer.parseInt("two"); double aDoublePrim = Double.parseDouble("two.two"); Integer aIntObj = Integer.valueOf("three"); Long decodedLong = Long.decode("64403L");
Тогда мы увидим такое же ошибочное поведение.
И мы можем исправить их аналогичным образом:
int aIntPrim = Integer.parseInt("2"); double aDoublePrim = Double.parseDouble("2.2"); Integer aIntObj = Integer.valueOf("3"); Long decodedLong = Long.decode("64403");
2.3. Передача строк с посторонними символами
Или, если мы попытаемся преобразовать строку в число с посторонними данными на входе, такими как пробелы или специальные символы:
Short shortInt = new Short("2 "); int bIntPrim = Integer.parseInt("_6000");
Тогда у нас будет та же проблема, что и раньше.
Мы можем исправить это с помощью небольших манипуляций со строками:
Short shortInt = new Short("2 ".trim()); int bIntPrim = Integer.parseInt("_6000".replaceAll("_", "")); int bIntPrim = Integer.parseInt("-6000");
Обратите внимание, что здесь, в строке 3, разрешены отрицательные числа с использованием символа дефиса как знака минус.
2.4. Форматы номеров для конкретных регионов
Давайте посмотрим на особый случай номеров, зависящих от локали. В европейских регионах запятая может представлять десятичный знак. Например, «4000,1» может представлять десятичное число «4000,1».
По умолчанию мы получим NumberFormatException , пытаясь разобрать значение, содержащее запятую:
double aDoublePrim = Double.parseDouble("4000,1");
Нам нужно разрешить использование запятых и избежать исключения в этом случае. Чтобы это стало возможным, Java должна понимать запятую здесь как десятичную дробь.
Мы можем разрешить использование запятых для европейского региона и избежать исключения, используя NumberFormat .
Давайте посмотрим на это в действии на примере Locale для Франции:
NumberFormat numberFormat = NumberFormat.getInstance(Locale.FRANCE); Number parsedNumber = numberFormat.parse("4000,1"); assertEquals(4000.1, parsedNumber.doubleValue()); assertEquals(4000, parsedNumber.intValue());
3. Передовой опыт
Давайте поговорим о нескольких хороших практиках, которые могут помочь нам справиться с NumberFormatException :
- Не пытайтесь преобразовывать буквенные или специальные символы в числа — API чисел Java не может этого сделать.
- Возможно, мы захотим проверить входную строку с помощью регулярных выражений и выбросить исключение для недопустимых символов .
- Мы можем очистить ввод от предсказуемых известных проблем с помощью таких методов, как trim () и replaceAll () .
- В некоторых случаях вводимые специальные символы могут быть допустимыми. Для этого мы выполняем специальную обработку, например, используя NumberFormat , который поддерживает множество форматов.
4. Вывод
В этом руководстве мы обсудили NumberFormatException в Java и его причины. Понимание этого исключения может помочь нам создавать более надежные приложения.
Кроме того, мы изучили стратегии, позволяющие избежать исключения с некоторыми недопустимыми входными строками.
Наконец, мы увидели несколько передовых методов работы с NumberFormatException .
Как обычно, исходный код, используемый в примерах, можно найти на GitHub.
При работе в банке-клиенте «Банк Россия» возникает ошибка:
For input string:»».
Возможное решение:
1) Заходим в профиль текущего пользователя. Набираем в адресной строке проводника «%userprofile%» без кавычек.
2) Находим и удаляем файл «.iBank2».
3) Проверяем результат.
glebasik0 0 / 0 / 0 Регистрация: 10.04.2017 Сообщений: 8 |
||||||||
1 |
||||||||
03.11.2017, 05:41. Показов 15682. Ответов 2 Метки нет (Все метки)
Считываю из файла строку: asdasdasd112 sada 1 123dfdsd
Но на всякий случай вот весь код:
0 |
al1as 386 / 74 / 31 Регистрация: 13.04.2012 Сообщений: 127 |
||||||||||||
03.11.2017, 07:00 |
2 |
|||||||||||
Я бы вообще весь ваш код с заполнением листа после 17 строки заменил на:
А у вас ошибка в 36 строке: строки нужно сравнивать через equals. После этого у вас в массиве на месте пустого символа окажется элемент null. Избавиться от него при создании листа можно такой строкой
Либо вручную создавать лист и при добавлении элементов проверять на null (но не использовать Arrays.asList(), т.к. он создает лист фиксированного размера, и удалить из него ничего не выйдет). Добавлено через 9 минут
0 |
746 / 493 / 285 Регистрация: 10.09.2015 Сообщений: 1,530 |
|
03.11.2017, 12:58 |
3 |
(Character.isSpaceChar(Integer.parseInt(ListChisel.get(i)) — ты пытаешься пробел перевести в число, вот тебе и ошибка
0 |
1. Введение
Java выдает NumberFormatException — непроверенное исключение — когда не может преобразовать String в числовой тип.
Поскольку он не отмечен, Java не заставляет нас обрабатывать или объявлять его.
В этом кратком руководстве мы опишем и продемонстрируем, что вызывает исключение NumberFormatException в Java и как его избежать или как справиться с этим .
NumberFormatException вызывают различные проблемы . Например, некоторые конструкторы и методы в Java вызывают это исключение.
Мы обсудим большинство из них в следующих разделах.
2.1. Нечисловые данные, передаваемые в конструктор
Давайте посмотрим на попытку построить объект Integer или Double с нечисловыми данными.
Оба этих оператора вызовут исключение NumberFormatException :
Integer aIntegerObj = new Integer("one"); Double doubleDecimalObj = new Double("two.2");
Давайте посмотрим на трассировку стека, которую мы получили, когда передали недопустимый ввод «one» в конструктор Integer в строке 1:
Exception in thread "main" java.lang.NumberFormatException: For input string: "one" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.(Integer.java:867) at MainClass.main(MainClass.java:11)
Это вызвало исключение NumberFormatException . Конструктору Integer не удалось внутренне понять ввод с помощью parseInt () .
Java Number API не разбирает слова на числа, поэтому мы можем исправить код, просто изменив его на ожидаемое значение:
Integer aIntegerObj = new Integer("1"); Double doubleDecimalObj = new Double("2.2");
2.2. Анализ строк, содержащих нечисловые данные
Подобно поддержке синтаксического анализа в конструкторе Java, у нас есть специальные методы синтаксического анализа, такие как par seInt (), parseDouble (), valueOf () и decode () .
Если мы попробуем сделать такие же преобразования с помощью этих:
int aIntPrim = Integer.parseInt("two"); double aDoublePrim = Double.parseDouble("two.two"); Integer aIntObj = Integer.valueOf("three"); Long decodedLong = Long.decode("64403L");
Тогда мы увидим такое же ошибочное поведение.
И мы можем исправить их аналогичным образом:
int aIntPrim = Integer.parseInt("2"); double aDoublePrim = Double.parseDouble("2.2"); Integer aIntObj = Integer.valueOf("3"); Long decodedLong = Long.decode("64403");
2.3. Передача строк с посторонними символами
Или, если мы попытаемся преобразовать строку в число с посторонними данными на входе, такими как пробелы или специальные символы:
Short shortInt = new Short("2 "); int bIntPrim = Integer.parseInt("_6000");
Тогда у нас будет та же проблема, что и раньше.
Мы можем исправить это с помощью небольших манипуляций со строками:
Short shortInt = new Short("2 ".trim()); int bIntPrim = Integer.parseInt("_6000".replaceAll("_", "")); int bIntPrim = Integer.parseInt("-6000");
Обратите внимание, что здесь, в строке 3, разрешены отрицательные числа с использованием символа дефиса как знака минус.
2.4. Форматы номеров для конкретных регионов
Давайте посмотрим на особый случай номеров, зависящих от локали. В европейских регионах запятая может представлять десятичный знак. Например, «4000,1» может представлять десятичное число «4000,1».
По умолчанию мы получим NumberFormatException , пытаясь разобрать значение, содержащее запятую:
double aDoublePrim = Double.parseDouble("4000,1");
Нам нужно разрешить использование запятых и избежать исключения в этом случае. Чтобы это стало возможным, Java должна понимать запятую здесь как десятичную дробь.
Мы можем разрешить использование запятых для европейского региона и избежать исключения, используя NumberFormat .
Давайте посмотрим на это в действии на примере Locale для Франции:
NumberFormat numberFormat = NumberFormat.getInstance(Locale.FRANCE); Number parsedNumber = numberFormat.parse("4000,1"); assertEquals(4000.1, parsedNumber.doubleValue()); assertEquals(4000, parsedNumber.intValue());
3. Передовой опыт
Давайте поговорим о нескольких хороших практиках, которые могут помочь нам справиться с NumberFormatException :
- Не пытайтесь преобразовывать буквенные или специальные символы в числа — API чисел Java не может этого сделать.
- Возможно, мы захотим проверить входную строку с помощью регулярных выражений и выбросить исключение для недопустимых символов .
- Мы можем очистить ввод от предсказуемых известных проблем с помощью таких методов, как trim () и replaceAll () .
- В некоторых случаях вводимые специальные символы могут быть допустимыми. Для этого мы выполняем специальную обработку, например, используя NumberFormat , который поддерживает множество форматов.
4. Вывод
В этом руководстве мы обсудили NumberFormatException в Java и его причины. Понимание этого исключения может помочь нам создавать более надежные приложения.
Кроме того, мы изучили стратегии, позволяющие избежать исключения с некоторыми недопустимыми входными строками.
Наконец, мы увидели несколько передовых методов работы с NumberFormatException .
Как обычно, исходный код, используемый в примерах, можно найти на GitHub.
На чтение 5 мин. Просмотров 27 Опубликовано 15.12.2019
String metric — String metrics (also known as similarity metrics) are a >Wikipedia
String ribbon — solar cells is proprietary technology developed by Evergreen Solar. Technology descriptionString Ribbon describes a method of producing high grade silicon wafers suitable for the photovoltaics industry. The name describes the manufacturing… … Wikipedia
String literal — A string literal is the representation of a string value within the source code of a computer program. There are numerous alternate notations for specifying string literals, and the exact notation depends on the indiv >Wikipedia
String exploits — Several implementation / design flaws are associated with string programming, some of those are associated with security exploits. Concatenation problems It is possible to cause String1 + User Input String + String2 to behave in unepected ways by … Wikipedia
String (computer science) — In formal languages, which are used in mathematical logic and theoretical computer science, a string is a finite sequence of symbols that are chosen from a set or alphabet. In computer programming, a string is traditionally a sequence of… … Wikipedia
Input mask — In computer programming, an input mask often refers to a string expression that a developer defines, which governs what is allowed to be entered into a typical edit box. It can be sa >Wikipedia
String+Alt+Delete — Die Standard Tastenkombination „Strg Alt Entf“ ist nur mit zwei Händen zu erreichen, allerdings hat die einhändig erreichbare AltGr+Strg (rechts)+Entf Kombination dieselbe Wirkung. Benutzer von Personal Computern und anderen Rechnersystemen… … Deutsch Wikipedia
String+Alt+Entfernen — Die Standard Tastenkombination „Strg Alt Entf“ ist nur mit zwei Händen zu erreichen, allerdings hat die einhändig erreichbare AltGr+Strg (rechts)+Entf Kombination dieselbe Wirkung. Benutzer von Personal Computern und anderen Rechnersystemen… … Deutsch Wikipedia
Closest string — In theoretical computer science, closest string is the name of an NP hard computational problem, which tries to find the geometrical center of a set of input strings. To understand the word center it is necessary to define a distance between two… … Wikipedia
Aho–Corasick string matching algorithm — The Aho–Corasick string matching algorithm is a string searching algorithm invented by Alfred V. Aho and Margaret J. Corasick. It is a kind of dictionary matching algorithm that locates elements of a finite set of strings (the dictionary ) within … Wikipedia
C file input/output — C Standard Library Data types Character >Wikipedia
String metric — String metrics (also known as similarity metrics) are a >Wikipedia
String literal — A string literal is the representation of a string value within the source code of a computer program. There are numerous alternate notations for specifying string literals, and the exact notation depends on the indiv >Wikipedia
String (computer science) — In formal languages, which are used in mathematical logic and theoretical computer science, a string is a finite sequence of symbols that are chosen from a set or alphabet. In computer programming, a string is traditionally a sequence of… … Wikipedia
String ribbon — solar cells is proprietary technology developed by Evergreen Solar. Technology descriptionString Ribbon describes a method of producing high grade silicon wafers suitable for the photovoltaics industry. The name describes the manufacturing… … Wikipedia
String exploits — Several implementation / design flaws are associated with string programming, some of those are associated with security exploits. Concatenation problems It is possible to cause String1 + User Input String + String2 to behave in unepected ways by … Wikipedia
Input mask — In computer programming, an input mask often refers to a string expression that a developer defines, which governs what is allowed to be entered into a typical edit box. It can be sa >Wikipedia
C file input/output — C Standard Library Data types Character >Wikipedia
Magic string — A magic string is an input that a programmer believes will never come externally and which activates otherwise h >Wikipedia
Closest string — In theoretical computer science, closest string is the name of an NP hard computational problem, which tries to find the geometrical center of a set of input strings. To understand the word center it is necessary to define a distance between two… … Wikipedia
Aho–Corasick string matching algorithm — The Aho–Corasick string matching algorithm is a string searching algorithm invented by Alfred V. Aho and Margaret J. Corasick. It is a kind of dictionary matching algorithm that locates elements of a finite set of strings (the dictionary ) within … Wikipedia
printf format string — An example of the printf function. Printf format string (which stands for print formatted ) refers to a control parameter used by a >Wikipedia
Перевод по словам
adjective: входной, вводимый, подводимый, поглощенный
noun: ввод, ввод данных, входные данные, потребление, исходные данные, поглощение, вводное устройство, предоставление данных, предоставление сведений
- — input range — входной диапазон
- — input terminal — входная клемма
- — input connector — входной разъем
- — mnemonic input — устройство ввода с мнемоническими обозначениями команд на клавишах
- — screening of input leads — экранирование входных проводников
- — analogue input expander — расширение аналогового входа
- — input impedance — входной импеданс
- — input signal amplitude — амплитуда входного сигнала
- — input power — входная мощность
- — input pattern — входной образ
noun: строка, струна, шнурок, ряд, нитка, вереница, веревка, тетива, бечевка, завязка
verb: нанизывать, натягивать, обманывать, натягивать тетиву, вешать, завязывать, привязывать, шнуровать, водить за нос