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

4
我有一个方法:
public BigInteger method(String param){
    try{
            return new BigInteger(param);
    }catch(NumberFormatException e){
        LOG.error(e, e);
    }
}

我想确认是否能够从这些字符串参数中创建一个BigInteger,而不会生成NumberFormatException异常。有没有办法这样做呢?

1
会不会是“NumberFormatException”呢? - Alexis C.
在这种情况下,问题是不要产生任何异常。 - dmreshet
为什么不呢?当然你可以尝试匹配 ^-?\s*\d+$ 这样的东西,但是为什么不直接使用 try 和 catch 呢? - SQB
4个回答

3
你可以使用来自Apache Commons的NumberUtils,它具有isDigits()方法。

2
基本上有两种可能的方法:
  1. 您可以检查字符串是否只包含数字,而不超过Bigint所允许的范围

  2. 使用try{}catch()进行强制转换...这并不是很高效,更多的是一种懒惰的做法!

在这里您可能会找到一些灵感 :)


1
为什么性能不太好?正如在StackOverflow上多次确认的那样,确实存在性能损失,但并不大。除非您处于紧密循环中,处理数百万个字符串且其中高比例无效,否则您不会注意到。 - SQB

1
你可以检查它是否与类似^-?\s*\d+$的内容匹配,但只是尝试和捕获也可以。在使用异常时会有一定的性能损失,但非常非常小,所以除非你在紧密循环中遍历大量具有高比例无效字符串的字符串,否则只需尝试并捕获即可。不需要记录错误,只需返回适合你的任何内容(我想要么是nullBigInteger.ZERO)。

0

我认为在这里捕获异常是完全可以的。

只是,记录它是愚蠢的。只需返回null或适当的BigInteger sentinel /默认值即可。(并适当使用返回值。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接