Si vous voulez vraiment évaluer les chaînes et ne vous dérange pas en utilisant s-expressions que vous pouvez ensuite utiliser Clojure:
Clojure 1.0.0-
user=> (def s "(+ 7 3)")
#'user/s
user=> (load-string s)
10
user=>
Si vous prenez cette route, veillez à désinfecter les cordes avant de les évaluer ou vous pourriez vous exposer à des attaques par injection.
BTW quand Clojure évalue l'expression, il utilisera un BigInteger si nécessaire, par exemple:
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=>
S'il vous plaît préciser si vous avez besoin d'un BigInteger en effet de stocker un nombre trop grand pour un long, ou si vous juste besoin d'un analyseur d'expression et confondu le constructeur BigInteger (String). – MAK
@MAK - J'ai besoin d'un analyseur d'expression et je suis également convaincu qu'une fois l'expression analysée et analysée, elle serait suffisamment longue pour être stockée dans un BigInteger. – ping