封装 Integer.parseInt() 的好方法

2022-08-31 10:05:52

我有一个项目,我们经常用它来将字符串转换为int。当出现问题时(例如,不是数字而是字母,或者其他什么),此方法将引发异常。但是,如果我必须在代码中处理所有地方的异常,这很快就会变得非常丑陋。我想把它放在一个方法中,但是,我不知道如何返回一个干净的值,以表明转换出错。Integer.parseInt()Stringa

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

那么有没有一种干净的方法来做到这一点呢?


答案 1

您可以在解析失败时返回 一个 而不是 ,返回。Integerintnull

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

编辑:这种方法的代码:

public static Integer tryParse(String text) {
  try {
    return Integer.parseInt(text);
  } catch (NumberFormatException e) {
    return null;
  }
}

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

最初这个答案使用构造函数;它现在使用和拳击操作;这样,小值最终将被装箱到缓存的对象中,从而在这些情况下提高效率。new Integer(String)Integer.parseIntInteger


答案 2

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

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

public static int parseWithDefault(String number, int defaultVal) {
  try {
    return Integer.parseInt(number);
  } catch (NumberFormatException e) {
    return defaultVal;
  }
}

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


推荐