当我尝试计算像“7 + 3”这样的字符串然后将结果存储在 BigInteger 变量中时,我面临的 BigInteger 问题会引发 NumberFormat 异常。关于如何工作的任何指示?例如:
String ist="7+2";
java.math.BigInteger a = new java.math.BigInteger(ist);
当我尝试计算像“7 + 3”这样的字符串然后将结果存储在 BigInteger 变量中时,我面临的 BigInteger 问题会引发 NumberFormat 异常。关于如何工作的任何指示?例如:
String ist="7+2";
java.math.BigInteger a = new java.math.BigInteger(ist);
BigInteger 无法计算表达式。事实上,我不知道 Java 中有任何解决方案可以对任意算术表达式进行求值 - 您可以尝试使用 Groovy 或自己解析表达式。
如果您正在考虑解析,最简单的方法可能是将中缀表示法转换为波兰表示法,然后一次从一个运算符评估波兰语。查找调车场算法。
BigInteger
只会明白,当你传递一个像new java.math.BigInteger("9")
. 它无法解析您提供的内容。
正如 diciu 和 Peter Lang 所说,BigInteger 不能计算表达式。如果您需要在求值时会溢出某些原语(如 Integer)的数字,您可以创建两个 BigInteger,然后对结果求值。例如:
java.math.BigInteger a = new java.math.BigInteger("7").add(new java.math.BigInteger("2"));
如果您真的想评估字符串并且不介意使用 s 表达式,那么您可以使用 Clojure:
Clojure 1.0.0-
user=> (def s "(+ 7 3)")
#'user/s
user=> (load-string s)
10
user=>
如果您采用这种方法,请在评估字符串之前小心清理字符串,否则您可能会受到注入攻击。
顺便说一句,当 Clojure 计算表达式时,如果需要,它将使用 BigInteger,例如:
user=> (def s "(+ 1 2)")
#'user/s
user=> (def r (load-string s))
#'user/r
user=> (. r getClass)
java.lang.Integer
user=> (def s "(+ 1000000000000000000000000 20000000000000000000000)")
#'user/s
user=> (def r (load-string s))
#'user/r
user=> (. r getClass)
java.math.BigInteger
user=>