Подтвердить что ты не робот

Исключение числа чисел Integer.parseInt?

Мне кажется, что я должен пропустить что-то простое, но я получаю NumberFormatException по следующему коду:

System.out.println(Integer.parseInt("howareyou",35))

Ideone

Он может преобразовать String yellow из базы 35, я не понимаю, почему я получил бы NumberFormatException в этой строке.

4b9b3361

Ответ 1

Потому что результат будет больше Integer.MAX_VALUE

Попробуйте это

System.out.println(Integer.parseInt("yellow", 35));
System.out.println(Long.parseLong("howareyou", 35));

и для

Long.parseLong("abcdefghijklmno",25)

вам нужно BigInteger

Попробуйте это, и вы увидите, почему

System.out.println(Long.MAX_VALUE);
System.out.println(new BigInteger("abcdefghijklmno",25));

Ответ 2

Из JavaDocs:

Исключение типа NumberFormatException выбрано, если возникает одна из следующих ситуаций:

  • Первый аргумент null или строка длиной 0. ЛОЖЬ: "howareyou" не null и над длиной 0
  • Радиус меньше или меньше Character.MIN_RADIX или больше Character.MAX_RADIX. ЛОЖЬ: 35 находится в диапазоне [2,36]
  • Любой символ строки не является цифрой указанного радиуса, за исключением того, что первым символом может быть знак минус '-' ('\ u002D') или плюс знак '+' ('\ u002B') при условии, что строка длиннее длины 1. ЛОЖЬ: все символы "howareyou" находятся в радиусе диапазона [0, 'y']
  • == > Значение, представленное строкой, не является значением типа int. ИСТИНА: причина исключения. Значение слишком велико для int.

Следует использовать либо Long, либо BigInteger

Ответ 3

Может ли быть, что число > Integer.MAX_VALUE? Если я попробую ваш код с Long, он работает.

Ответ 4

Число больше, чем Integer.MAX_VALUE

Попробуйте следующее:

System.out.println(Integer.parseInt("yellow", 35));
System.out.println(Long.parseLong("howareyou", 35));

Как видно из комментариев René Link, вы ищете что-то вроде этого с помощью BigInteger:

BigInteger big=new BigInteger("abcdefghijklmno", 25);

Что-то вроде этого:

System.out.println(Long.MAX_VALUE);
System.out.println(new BigInteger("abcdefghijklmno",25));

Ответ 5

Как вы можете видеть, у вас заканчивается пробел в Integer. Поменяв его на Long, вы получите желаемый результат. Вот ссылка IDEOne на рабочий код.

Код

System.out.println(Integer.parseInt("YELLOW",35));
System.out.println(Long.parseLong("HOWAREYOU",35));

Ответ 6

Полученное число слишком велико для Java Integer, используйте Long.

Ответ 7

Предыдущие ответы parseLong были бы правильными, но иногда это также недостаточно велико, чтобы другой вариант использовал BigInteger.

Long.parseLong("howareyou", 35)
new BigInteger("howareyou", 35)