Правильный способ избежать parseInt бросить NumberFormatException для строки ввода: ""
Когда я запускаю parseInt:
Integer.parseInt(myString);
он бросает:
NumberFormatException: For input string: ""
Означает ли это, что я делаю что-то вроде этого?
if(StringUtils.isNotBlank(myString))
return Integer.parseInt(myString);
else
return 0;
Ответы
Ответ 1
Ну, вместо этого вы можете использовать условный оператор:
return StringUtils.isNotBlank(myString) ? Integer.parseInt(myString) : 0;
Если вам нужно сделать это в нескольких местах, вы, вероятно, захотите поместить это в отдельный метод. Обратите внимание, что вы также должны учитывать ситуации, когда myString
имеет значение NULL или содержит нечисловой текст.
Ответ 2
Да, но: Заверните его в тонкий метод (и устранить избыточные else
), или использовать существующую реализацию, как Commons Lang NumberUtils.toInt(str, defaultValue)
:
NumberUtils.toInt(myString, 0);
Этот метод обрабатывает null
значения и ошибки преобразования.
Самостоятельно написать то же самое:
- Проверить на ноль и/или...
- ...
NumberFormatExtension
исключение NumberFormatExtension
Ответ 3
Если строка может быть пустой, я делаю это следующим образом:
Integer.parseInt("0" + inputString)
Когда я не уверен, что он содержит только цифры:
Integer.parseInt(0 + inputString.replaceAll("\\D+",""))
Ответ 4
У вас все хорошо, но в качестве стиля кодирования я предпочитаю делать тесты "положительные" (isBlank
), а не "отрицательные" (isNotBlank
), то есть
if (StringUtils.isBlank(myString)) {
return 0;
}
return Integer.parseInt(myString); // Note: No need for else when the if returns
или, более лаконично:
return StringUtils.isBlank(myString) ? 0 : Integer.parseInt(myString);
Ответ 5
Да. (Подтвердите свои данные, прежде чем делать предположения о том, что в них.: -)
+1 для поиска Apache common-lang w/ StringUtils
.
Ответ 6
Integer.parseInt(String)
не принимает нечисловой ввод, включая нули и пустые строки.
Либо защитите от того, что вы предложили, либо поймаете NFE.
Ответ 7
Я не знаю, почему я искал это, но здесь простой способ:
int test=str.isEmpty()?0:Integer.parseInt(str);