Правильный способ избежать 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);