首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >封装Integer.parseInt()的好方法

封装Integer.parseInt()的好方法
EN

Stack Overflow用户
提问于 2009-09-28 17:02:09
回答 21查看 221.4K关注 0票数 98

我有一个项目,在这个项目中,我们经常使用Integer.parseInt()将字符串转换为整数。当出现错误(例如,String不是数字,而是字母a等)时,此方法将抛出异常。然而,如果我不得不在我的代码中到处处理异常,这很快就会开始看起来非常丑陋。我想把它放在一个方法中,然而,我不知道如何返回一个干净的值来表明转换出错。

在C++中,我可以创建一个接受int指针的方法,并让方法本身返回true或false。然而,据我所知,这在Java中是不可能的。我也可以创建一个包含true/false变量和转换后的值的对象,但这似乎也不太理想。对于全局值也是如此,这可能会给我在多线程方面带来一些麻烦。

那么有没有一种干净利落的方法呢?

EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2009-09-28 09:02:57

您可以返回Integer而不是int,在解析失败时返回null

遗憾的是,Java没有提供一种在内部不抛出异常的情况下实现这一点的方法-您可以隐藏异常(通过捕获它并返回null),但如果您正在解析数十万位用户提供的数据,这仍然可能是一个性能问题。

EDIT:这样的方法的代码:

代码语言:javascript
复制
public static Integer tryParse(String text) {
  try {
    return Integer.parseInt(text);
  } catch (NumberFormatException e) {
    return null;
  }
}

请注意,我根本不确定如果text为null,这将如何处理。你应该考虑这一点--如果它代表一个bug (例如,你的代码可能传递了一个无效值,但永远不应该传递null),那么抛出一个异常是合适的;如果它不代表一个bug,那么你可能应该像返回其他任何无效值一样返回null。

最初,这个答案使用new Integer(String)构造函数;现在它使用Integer.parseInt和装箱操作;通过这种方式,小值将最终被装箱到缓存的Integer对象,使其在这些情况下更有效。

票数 153
EN

Stack Overflow用户

发布于 2009-09-28 11:13:17

当它不是数字时,你期望什么行为?

例如,如果您经常在输入不是数字时使用默认值,那么这样的方法可能会很有用:

代码语言:javascript
复制
public static int parseWithDefault(String number, int defaultVal) {
  try {
    return Integer.parseInt(number);
  } catch (NumberFormatException e) {
    return defaultVal;
  }
}

当输入不能被解析时,可以为不同的默认行为编写类似的方法。

票数 38
EN

Stack Overflow用户

发布于 2013-09-28 02:44:10

在某些情况下,您应该将解析错误作为快速失败的情况来处理,但在其他情况下,例如应用程序配置,我更喜欢使用Apache Commons Lang 3 NumberUtils来处理缺省的输入。

代码语言:javascript
复制
int port = NumberUtils.toInt(properties.getProperty("port"), 8080);
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1486077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档