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

发布于 2024-12-25 11:32:24 字数 304 浏览 2 评论 0原文

当我运行 parseInt: 时

Integer.parseInt(myString);

,它会抛出:

NumberFormatException: For input string: ""

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

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

When I run parseInt:

Integer.parseInt(myString);

it throws:

NumberFormatException: For input string: ""

Does this mean I have do something like this?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

蘸点软妹酱 2025-01-01 11:32:24

是的,但是:将其包装在一个简单的方法中(并消除多余的else),或者使用现有的实现,例如公共资源Lang 的 NumberUtils.toInt(str, defaultValue)

NumberUtils.toInt(myString, 0);

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

自己编写相同的内容非常简单:

  • 检查 null 和/或......
  • 包装 NumberFormatExtension 异常

Yes, but: Wrap it in a thin method (and eliminate the redundant else), or use an existing implementation, like Commons Lang's NumberUtils.toInt(str, defaultValue):

NumberUtils.toInt(myString, 0);

This method handles null values and conversion failures.

Writing the same thing on your own is straight-forward:

  • Check for null, and/or...
  • ...Wrap the NumberFormatExtension exception
好多鱼好多余 2025-01-01 11:32:24

那么,您可以改用条件运算符:

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

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

Well, you could use the conditional operator instead:

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

If you need to do this in multiple places, you'd probably want to put this into a separate method. Note that you should also consider situations where myString is null, or contains non-numeric text.

莫言歌 2025-01-01 11:32:24

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

Integer.parseInt("0" + inputString)

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

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

If the string can be empty I do it this way:

Integer.parseInt("0" + inputString)

When I'm not sure it contains only digits:

Integer.parseInt(0 + inputString.replaceAll("\\D+",""))
柒夜笙歌凉 2025-01-01 11:32:24

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

What you have is fine, but as a coding style I prefer to make tests "positive" (isBlank), rather than "negative" (isNotBlank), ie

if (StringUtils.isBlank(myString)) {
    return 0;
}
return Integer.parseInt(myString); // Note: No need for else when the if returns

or, more succinctly:

return StringUtils.isBlank(myString) ? 0 : Integer.parseInt(myString);
爱她像谁 2025-01-01 11:32:24

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

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

Yes. (Validate your inputs before making assumptions about what are in them. :-)

+1 for already finding Apache's common-lang w/ StringUtils.

爱殇璃 2025-01-01 11:32:24

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

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

Integer.parseInt(String) doesn't accept non-numeric input, including nulls and empty strings.

Either guard against that like you suggested, or catch the NFE.

べ繥欢鉨o。 2025-01-01 11:32:24

我不知道为什么我要寻找这个,但这是一个简单的方法:

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

I don't know why was I searching for this but here's the easy way:

int test=str.isEmpty()?0:Integer.parseInt(str);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文