17

当我运行 parseInt 时:

Integer.parseInt(myString);

它抛出:

NumberFormatException: For input string: ""

这是否意味着我已经做了这样的事情?

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

7 回答 7

29

是的,但是:将其包装在一个瘦方法中(并消除多余的else),或使用现有的实现,如Commons Lang 的NumberUtils.toInt(str, defaultValue)

NumberUtils.toInt(myString, 0);

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

自己写同样的东西是直截了当的:

  • 检查空值,和/或...
  • ...包装NumberFormatExtension异常
于 2012-01-08T20:30:06.233 回答
18

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

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

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

于 2012-01-08T20:26:40.953 回答
8

如果字符串可以为空,我会这样做:

Integer.parseInt("0" + inputString)

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

Integer.parseInt(0 + inputString.replaceAll("\\D+",""))
于 2016-02-19T14:38:02.130 回答
2

你所拥有的很好,但作为一种编码风格,我更喜欢让测试“正面”(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);
于 2012-01-08T20:31:24.023 回答
0

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

+1 已经找到 Apache 的 common-lang w/ StringUtils

于 2012-01-08T20:26:23.833 回答
0

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

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

于 2012-01-08T20:26:57.360 回答
0

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

int test=str.isEmpty()?0:Integer.parseInt(str);
于 2013-11-08T12:37:52.083 回答