java有一个不会为坏数据抛出异常的int.tryparse吗?

时间:2011-12-05 21:15:56

标签: java

  

可能重复:
  Java: Good way to encapsulate Integer.parseInt()
  how to convert a string to float and avoid using try/catch in java?

C#有Int.TryParse:Int32.TryParse Method (String, Int32%)

这种方法的优点在于它不会为坏数据抛出异常。

在java中,Integer.parseInt("abc")会抛出异常,如果发生这种情况,很多性能都会受到影响。

对于性能问题的情况,有什么方法可以解决这个问题吗?

我能想到的另一种方法是针对正则表达式运行输入,但我必须测试以查看更快的内容。

3 个答案:

答案 0 :(得分:50)

没有。你必须这样做:

boolean tryParseInt(String value) {  
     try {  
         Integer.parseInt(value);  
         return true;  
      } catch (NumberFormatException e) {  
         return false;  
      }  
}

...你可以像这样使用它:

if (tryParseInt(input)) {  
   Integer.parseInt(input);  // We now know that it's safe to parse
}

答案 1 :(得分:27)

Apache Commons有一个IntegerValidator类似乎可以做你想要的。 Java没有为此提供内置方法。

答案 2 :(得分:0)

编辑 - 刚看到您对与潜在坏输入数据相关的性能问题的评论。我不知道parseInt上的try / catch如何与正则表达式进行比较。我认为,基于非常少的硬性知识,与Java中的try / catch相比,正则表达式并不是非常高效。

无论如何,我只是这样做:

public Integer tryParse(Object obj) {
  Integer retVal;
  try {
    retVal = Integer.parseInt((String) obj);
  } catch (NumberFormatException nfe) {
    retVal = 0; // or null if that is your preference
  }
  return retVal;
}