首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java有没有一个不会抛出坏数据异常的int.tryparse?

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

Stack Overflow用户
提问于 2011-12-06 05:15:56
回答 3查看 158.3K关注 0票数 127

可能重复:

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")会抛出一个异常,在可能发生这种情况的情况下,性能会受到很大影响。

对于那些性能有问题的情况,有没有办法解决这个问题?

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

EN

回答 3

Stack Overflow用户

发布于 2011-12-06 05:20:47

不是的。你必须像这样做你自己的:

代码语言:javascript
复制
public int tryParseInt(String value, int defaultVal) {
    try {
        return Integer.parseInt(value);
    } catch (NumberFormatException e) {
        return defaultVal;
    }
}

...or

代码语言:javascript
复制
public Integer parseIntOrNull(String value) {
    try {
        return Integer.parseInt(value);
    } catch (NumberFormatException e) {
        return null;
    }
}
票数 87
EN

Stack Overflow用户

发布于 2011-12-06 05:23:27

Apache Commons有一个IntegerValidator类,它似乎可以做您想做的事情。Java没有提供这样做的内置方法。

有关groupid/artifactid的信息,请参见here

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

代码语言:javascript
复制
private boolean valueIsAndInt(String value) {
    boolean returnValue = true;
    if (null == new org.apache.commons.validator.routines.IntegerValidator().validate(value)) {
        returnValue = false;
    }
    return returnValue;
}
票数 32
EN

Stack Overflow用户

发布于 2011-12-06 05:19:37

编辑--刚刚看到您对与潜在的错误输入数据相关的性能问题的评论。我不知道parseInt上的try/catch与正则表达式相比如何。我猜测,基于很少的硬知识,与Java中的try/catch相比,正则表达式的性能并不是很好。

不管怎样,我只会这么做:

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8391979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档