Java 如何检查是否可以从字符串创建BigInteger

Java 如何检查是否可以从字符串创建BigInteger,java,Java,我有一个方法: public BigInteger method(String param){ try{ return new BigInteger(param); }catch(NumberFormatException e){ LOG.error(e, e); } } 我想检查是否可以从那些字符串参数创建biginger,而不生成NumberFormatException 有什么办法可以这样做吗?基本上你有两种可能的方法: 您

我有一个方法:

public BigInteger method(String param){
    try{
            return new BigInteger(param);
    }catch(NumberFormatException e){
        LOG.error(e, e);
    }
}
我想检查是否可以从那些
字符串参数
创建
biginger
,而不生成
NumberFormatException


有什么办法可以这样做吗?

基本上你有两种可能的方法:

  • 您可以检查字符串是否只包含数字,而不是比Bigint中包含的数字多

  • 中强制转换,尝试{}catch()
    并捕获所有内容。。。这不是很好的表现,更像是一种懒惰的方法


  • 你可能会找到一些灵感:)

    我认为在这里抓住这个例外是非常好的


    只是,这是愚蠢的。只需返回
    null
    或适当的BigInteger/默认值。(并适当使用返回值。)

    您可以从Apache Commons使用。它有isDigits()方法。

    您可以检查它是否匹配类似于
    ^-?\s*\d+$
    的内容,但只要尝试并捕获就可以了

    使用异常会对性能造成影响,但影响非常非常小,因此,除非您处于一个紧密的循环中,在数以百万计的字符串中循环使用高百分比的无效字符串,否则请尝试捕获。

    无需记录错误,只需返回适合您的内容(我可以想象是
    null
    biginger.ZERO

    不是
    NumberFormatException
    ?问题是在这种情况下不生成任何异常为什么不?当然,您可以尝试匹配类似于
    ^-?\s*\d+$
    的内容,但为什么不尝试捕获呢?为什么性能不太好?正如在StackOverflow上多次建立的那样,性能受到了影响,但不是很大。除非您处于一个紧密的循环中,处理数百万个包含高百分比无效字符串的字符串,否则您不会注意到。