正确的方法是避免parseInt为输入字符串抛出NumberFormatException:“”

时间:2012-01-08 20:24:35

标签: java string parseint

当我运行parseInt时:

Integer.parseInt(myString);
它扔了:

NumberFormatException: For input string: ""

这是否意味着我做了类似的事情?

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

7 个答案:

答案 0 :(得分:25)

是的,但是:用精简方法包装(并消除多余的else),或者使用现有的实现,例如Commons Lang's NumberUtils.toInt(str, defaultValue)

NumberUtils.toInt(myString, 0);

此方法处理null值和转换失败。

答案 1 :(得分:10)

好吧,你可以改用条件运算符:

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

如果您需要在多个地方执行此操作,您可能希望将其放入单独的方法中。请注意,您还应该考虑myString为空或包含非数字文本的情况。

答案 2 :(得分:3)

如果字符串可以为空,我就是这样做的:

Integer.parseInt("0" + inputString)

当我不确定它只包含数字时:

Integer.parseInt(0 + inputString.replaceAll("\\D+",""))

答案 3 :(得分:1)

你所拥有的是好的,但作为一种编码风格,我更喜欢使测试“积极”(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);

答案 4 :(得分:0)

是。 (在对其中的内容做出假设之前验证您的输入。: - )

+1已经找到了Apache的普通语w / StringUtils

答案 5 :(得分:0)

Integer.parseInt(String)不接受非数字输入,包括空值和空字符串。

要么像你建议的那样防范,要么抓住NFE。

答案 6 :(得分:0)

我不知道为什么要搜索这个,但这里有简单的方法:

int test=str.isEmpty()?0:Integer.parseInt(str);