Правильный способ избежать parseInt, выбрасывающего NumberFormatException для входной строки: "" - PullRequest
13 голосов
/ 09 января 2012

Когда я запускаю parseInt:

Integer.parseInt(myString);

выдает:

NumberFormatException: For input string: ""

Означает ли это, что у меня есть что-то подобное?

if(StringUtils.isNotBlank(myString))
  return Integer.parseInt(myString);
else
 return 0;

Ответы [ 7 ]

25 голосов
/ 09 января 2012

Да, но: оберните его тонким способом (и исключите избыточный else) или используйте существующую реализацию, например Commons Lang's NumberUtils.toInt(str, defaultValue):

NumberUtils.toInt(myString, 0);

Этот метод обрабатывает null значений и сбоев преобразования.

11 голосов
/ 09 января 2012

Ну, вы могли бы вместо этого использовать условный оператор:

return StringUtils.isNotBlank(myString) ? Integer.parseInt(myString) : 0;

Если вам нужно сделать это в нескольких местах, вы, вероятно, захотите поместить это в отдельный метод.Обратите внимание, что вам также следует учитывать ситуации, когда myString является нулевым или содержит нечисловой текст.

3 голосов
/ 19 февраля 2016

Если строка может быть пустой, я делаю это так:

Integer.parseInt("0" + inputString)

Когда я не уверен, что она содержит только цифры:

Integer.parseInt(0 + inputString.replaceAll("\\D+",""))
1 голос
/ 09 января 2012

То, что у вас есть, хорошо, но в качестве стиля кодирования я предпочитаю делать тесты "положительными" (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);
0 голосов
/ 08 ноября 2013

Я не знаю, почему я искал это, но вот простой способ:

int test=str.isEmpty()?0:Integer.parseInt(str);
0 голосов
/ 09 января 2012

Integer.parseInt(String) не принимает нечисловой ввод, включая пустые и пустые строки.

Либо остерегайтесь того, что вы предложили, либо поймайте NFE.

0 голосов
/ 09 января 2012

Да.(Проверьте свои входные данные, прежде чем делать предположения о том, что в них содержится.: -)

+ 1 для того, чтобы уже найти общий язык Apache w / StringUtils.

...