For input string ошибка перевод

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

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 :

  1. Не пытайтесь преобразовывать буквенные или специальные символы в числа — API чисел Java не может этого сделать.
  2. Возможно, мы захотим проверить входную строку с помощью регулярных выражений и выбросить исключение для недопустимых символов .
  3. Мы можем очистить ввод от предсказуемых известных проблем с помощью таких методов, как trim () и replaceAll () .
  4. В некоторых случаях вводимые специальные символы могут быть допустимыми. Для этого мы выполняем специальную обработку, например, используя NumberFormat , который поддерживает множество форматов.

4. Вывод

В этом руководстве мы обсудили NumberFormatException в Java и его причины. Понимание этого исключения может помочь нам создавать более надежные приложения.

Кроме того, мы изучили стратегии, позволяющие избежать исключения с некоторыми недопустимыми входными строками.

Наконец, мы увидели несколько передовых методов работы с NumberFormatException .

Как обычно, исходный код, используемый в примерах, можно найти на GitHub.

«For input string» — это ошибка, которая может возникать при работе с числовыми значениями в языке программирования Java.

Причины ошибки «For input string»

Эта ошибка происходит, когда метод parseInt() используется для преобразования строки в число, но строка не может быть преобразована в число.

Например, если мы попытаемся преобразовать строку «abc» в целое число, вызов метода Integer.parseInt("abc") выдаст ошибку «For input string: ‘abc'».

Как избежать ошибки «For input string»

Чтобы избежать ошибки «For input string», необходимо убедиться, что преобразуемая строка содержит только числа. Если в строке присутствуют другие символы, то необходимо произвести их удаление или замену.

Также стоит убедиться, что строка не является пустой или null. Если строка пуста или содержит только пробелы, то метод parseInt() тоже выдаст ошибку «For input string».

Пример использования метода Integer.parseInt()

String str = "123";
int num = Integer.parseInt(str); // преобразуем строку в число

Заключение

Ошибка «For input string» может быть причиной многих проблем в Java-программировании. Она может быть легко избежана, если правильно обрабатывать входные данные.

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 :

  1. Не пытайтесь преобразовывать буквенные или специальные символы в числа — API чисел Java не может этого сделать.
  2. Возможно, мы захотим проверить входную строку с помощью регулярных выражений и выбросить исключение для недопустимых символов .
  3. Мы можем очистить ввод от предсказуемых известных проблем с помощью таких методов, как trim () и replaceAll () .
  4. В некоторых случаях вводимые специальные символы могут быть допустимыми. Для этого мы выполняем специальную обработку, например, используя NumberFormat , который поддерживает множество форматов.

4. Вывод

В этом руководстве мы обсудили NumberFormatException в Java и его причины. Понимание этого исключения может помочь нам создавать более надежные приложения.

Кроме того, мы изучили стратегии, позволяющие избежать исключения с некоторыми недопустимыми входными строками.

Наконец, мы увидели несколько передовых методов работы с NumberFormatException .

Как обычно, исходный код, используемый в примерах, можно найти на GitHub.


Вопрос:

Я получаю эту ошибку, когда запускаю следующий код и вводя 5×5 для размера. Не знаете почему?

Когда я вхожу в 10×10, кажется, что он работает нормально, но я не уверен, что результат правильный.

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)"

Вот мой код

    import java.util.Scanner;

public class CheckerBoard {

public static void main(String [] args){

Scanner userInput = new Scanner(System.in);

System.out.println("What two colors would you like your board to be?");

String colorOne = userInput.next();
String colorTwo = userInput.next();

do {
System.out.println("How big should the checker board be? (Square sizes only please)" + "\n"
+ "Please enter it like 4x4 with whatever numbers you choose.");

String boardSize = userInput.next();

int intOne = Integer.parseInt(boardSize.substring(0,boardSize.indexOf("x")));
System.out.println(boardSize.indexOf("x"));
int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf("x")+1, boardSize.length()-1));
System.out.println(intOne);

} while(false);
}
}

//keep in mind that this program is not done yet, this is just a current issue I am having atm.

Лучший ответ:

Проблема здесь:

int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf("x")+1, boardSize.length()-1));

Вы берете подстроку от x до length - 1. Вы должны перейти от x к length потому что substring не включает второй индекс.

Итак, вы получили ошибку на 5x5 потому что после x есть только один символ. Таким образом, вы пытались parseInt пустую строку. У вас не было исключения на 10x10, но вы использовали только 10x1.

Таким образом, вы должны изменить эту строку следующим образом:

int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf("x")+1, boardSize.length()));

Ответ №1

Я считаю, что более безопасный способ сделать это – раскол на x

String boardSize = userInput.next();
String[] split = boardSize.split("x");
int intOne = Integer.parseInt(split[0]);
int intTwo = Integer.parseInt(split[1]);

Очевидно, санируйте для BAD INPUT!

Ответ №2

В вашем коде не учитывается, что строка boardSize может быть пуста, когда выполняется строка;

int intOne = Integer.parseInt(boardSize.substring(0,boardSize.indexOf("x")));

Когда вы выполняете “indexOf”, ища то, чего не существует, вы получите -1 назад, что является недопустимым как аргумент вашей подстроки.

Ответ №3

Вы пробовали это?

        int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf("x")+1, boardSize.length()));

Вероятно, чем дольше вы посмотрите, тем решите проблему синтаксического анализа.

Ответ №4

+ Изменить
int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf("x")+1, boardSize.length()-1));
в
int intTwo = Integer.parseInt(boardSize.substring(boardSize.indexOf("x")+1, boardSize.length()));
Помните, что второй индекс, переданный в String.substring, не будет включен в возвращаемое значение.

Понравилась статья? Поделить с друзьями:
  • For honor ошибка 3 2147418101
  • Float divmod python ошибка
  • Flip battery ошибка пежо
  • Flibusta opds ошибка
  • Flengine dll ошибка