NumberFormatException преобразует строку в int с подчеркиванием, дефисом в jdk1.7

1

В jdk1.7 мы можем использовать знак подчеркивания в int, int anInt = 0b10101000_01010001_01101000_01010001;

однако, если у нас есть строка с подчеркиванием, дефис, она дает исключение формата номера при преобразовании в int.

почему это так?

Теги:

4 ответа

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

Помните о обратной совместимости?

  • Весь код, который работает (или не работает) в более ранних версиях Java, должен вести себя одинаково, даже если изменена версия Java,

Поэтому, если внедрить эту функцию, изменения будут внесены в JDK 7, тогда весь код, написанный в более ранних версиях java, также не будет генерировать это исключение, когда "_" было найдено в строке. Это будет очень серьезная проблема.

  • 0
    хорошо в простых терминах, почему это дает ошибку при преобразовании строки с "-" или "_"?
  • 0
    просто потому, что символы '-' и "_" не считаются числами, и компилятор считает, что пользователь дал неверный ввод String, и хочет преобразовать его в число
0

Тот факт, что вы можете использовать "_" в литералах, - это просто "синтаксический сахар" - это особенность языка Java, которая была добавлена для удобства.

Дизайнеры языка Java решили, что это "удобство" применимо только к исходному коду Java (обрабатывается компилятором Java); поэтому был обновлен только компилятор, чтобы разрешить такие шаблоны; но код "разбора", который выбрасывает исключения, не был изменен.

Скорее всего, основная причина заключалась в следующем: это что-то другое, чтобы писать приложения, которые анализируют номера из текста (по сравнению с тем, чтобы компилятор мог понимать "более читаемые" литералы).

0

Использование _ в integer используется, когда у вас есть группа цифр (возможно, смысл) как часть одной и той же переменной int, как в случае номера телефона (91_766986752), который является (code_number). но возвращаемое целое число равно только 91766986752.

ex - int anInt = 0b10101000_01010001_01101000_01010001;

В этом случае вы можете думать о каждой части как о некоторой разумной группе цифр для удобства пользователя или разработчика, чтобы понять, что int состоит из чего. Компилятор игнорирует эти _ и возвращает оставшуюся ценность int

В случае, если String преобразован в Integer, _ не игнорируется, что дает NumberFormatException, поскольку это не цифра.

Ex - String "91_766986752", когда преобразованный в int будет по-прежнему рассматривать _, а не игнорировать его.

-3

Я не знаю, почему, его hapens, но вы можете сделать замену, подчеркивание, точкой.

что-то вроде:

String number = 1000_000;

number = number.replace('_','.');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню