可能重复:
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")
会抛出异常,如果发生这种情况,很多性能都会受到影响。
对于性能问题的情况,有什么方法可以解决这个问题吗?
我能想到的另一种方法是针对正则表达式运行输入,但我必须测试以查看更快的内容。
答案 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;
}