Почему я получаю для Integer.parseInt (String) исключение numberformate? - PullRequest
3 голосов
/ 30 марта 2020

Мне кажется, что решение очень простое, но я сейчас смотрю на него в течение 10 минут и не могу найти никаких ошибок в своем коде. Серьезно.

Принимая во внимание, что eventDateStart является целым числом. Целое число обычно принимает 8 символов для преобразования строки в int, и я не понимаю, почему Java не может его преобразовать. Я как ... тьфу ??

Код создает NumberFormatException:

String rruleMonthday = "-1";

//where ar rrule is sth like --> RRULE:FREQ=MONTHLY;BYMONTHDAY=29
int firstMonthday = (rrule.indexOf("BYMONTHDAY=") + 11);

try {
rruleMonthday = rrule.substring(firstMonthday, rrule.indexOf(";", firstMonthday));
} catch (Exception ex) {
 rruleMonthday = rrule.substring(firstMonthday, rrule.indexOf("\n", firstMonthday));
}

eventDateStart = eventDateStart.substring(0, 6) + rruleMonthday;

System.out.println("eventDateStart: ." + eventDateStart + ".");


System.out.println("2: " + Integer.parseInt(eventDateStart)); //this Integer.parseInt conversion is printing numberformatexception 


вывод:

eventDateStart: .20200329.

java.lang.NumberFormatException: For input string: "20200329"

1 Ответ

2 голосов
/ 30 марта 2020

Согласно ASCII таблице последовательность 50,48,50,48,48,51,50,57 является значением 20200329. В вашем случае за ним следует символ возврата каретки 13.

Скорее всего, вы используете Windows, где последовательность конца строки равна \r\n. Вместо \n используйте System.lineSeparator(), чтобы сделать вашу платформу кода независимой:

} catch (Exception ex) {
    rruleMonthday = rrule.substring(firstMonthday, 
            rrule.indexOf(System.lineSeparator(), firstMonthday));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...