Java 是否有一个 int.tryparse,它不会为错误数据抛出异常?

可能的复制品:
Java: 封装 Integer.parseInt ()的好方法
如何将字符串转换为 float 并避免在 java 中使用 try/catch

C # has Int. TryParse: TryParse 方法(String,Int32%)

这个方法的优点是它不会为错误数据抛出异常。

在 java 中,Integer.parseInt("abc")会抛出一个异常,在这种情况下,性能会受到很大影响。

对于性能是一个问题的情况,是否有办法解决这个问题?

我能想到的唯一其他方法是对正则表达式运行输入,但是我必须测试哪种方法更快。

174527 次浏览

编辑 ——刚刚看到您关于与一个可能有问题的输入数据相关的性能问题的评论。我不知道 try/catch on parseInt 与 regex 相比有什么不同。我猜测,基于非常少的硬知识,与 try/catch 相比,正则表达式在 Java 中的性能不是很高。

总之,我会这么做:

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;
}

不,你得自己做,像这样:

public int tryParseInt(String value, int defaultVal) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
return defaultVal;
}
}

或者

public Integer parseIntOrNull(String value) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
return null;
}
}

ApacheCommons 有一个 整数验证器类,它似乎可以完成您想要的任务。Java 没有提供这样做的内置方法。

请参阅 给你了解 groupid/artifactid。

代码示例: (为了清楚地显示功能,略显冗长)

private boolean valueIsAndInt(String value) {
boolean returnValue = true;
if (null == new org.apache.commons.validator.routines.IntegerValidator().validate(value)) {
returnValue = false;
}
return returnValue;
}