可能重复:
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")
会抛出一个异常,在可能发生这种情况的情况下,性能会受到很大影响。
对于那些性能有问题的情况,有没有办法解决这个问题?
我能想到的唯一另一种方法是对正则表达式运行输入,但我必须进行测试,看看哪种方法更快。
发布于 2011-12-06 05:20:47
不是的。你必须像这样做你自己的:
public int tryParseInt(String value, int defaultVal) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
return defaultVal;
}
}
...or
public Integer parseIntOrNull(String value) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
return null;
}
}
发布于 2011-12-06 05:23:27
Apache Commons有一个IntegerValidator类,它似乎可以做您想做的事情。Java没有提供这样做的内置方法。
有关groupid/artifactid的信息,请参见here。
代码示例:(略显冗长以清楚地显示功能)
private boolean valueIsAndInt(String value) {
boolean returnValue = true;
if (null == new org.apache.commons.validator.routines.IntegerValidator().validate(value)) {
returnValue = false;
}
return returnValue;
}
发布于 2011-12-06 05:19:37
编辑--刚刚看到您对与潜在的错误输入数据相关的性能问题的评论。我不知道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;
}
https://stackoverflow.com/questions/8391979
复制相似问题