If you really want to evaluate strings and you don't mind using s-expressions then you could use Clojure:
Clojure 1.0.0-
user=> (def s "(+ 7 3)")
#'user/s
user=> (load-string s)
10
user=>
Here are instructions for invoking Clojure from Java
If you take this route be careful to sanitize the strings before you evaluate them or you could leave yourself open to injection attacks.
BTW when Clojure evaluates the expression it will use a BigInteger if needed, for instance:
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=>