Исключение числа чисел Integer.parseInt?
Мне кажется, что я должен пропустить что-то простое, но я получаю NumberFormatException
по следующему коду:
System.out.println(Integer.parseInt("howareyou",35))
Ideone
Он может преобразовать String yellow
из базы 35, я не понимаю, почему я получил бы NumberFormatException
в этой строке.
Ответы
Ответ 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)