Make a formula from a String into a number

I’m currently trying to make a problem to calculate a Expression in a String. Until now I used a code like this:

final ScriptEngine js=new ScriptEngineManager().getEngineByName("js");
String eq="5*(2+1)";
	double eg=(((Double) js.eval(eq)).doubleValue());
	catch(ScriptException c){
	throw new RuntimeException(c);

But is there another way to do this that doesn’t involve using a js interpreter?

1 Like

as far as i know eval is evil. this page will give you all the lingo you need to research how to evaluate expressions

1 Like


If your use case is things like "5*(2+1)" then the Jasmine library by @quark – that @GoToLoop linked to above – is definitely the way to go. It is expressive and blazing-fast.

This sketch shows how to use Jasmine to calculate 5*(2+1) and also how you can evaluate the expression a*(b+c) for different values.

import org.quark.jasmine.*;

String strExpr = "5*(2+1)";
Expression expr = Compile.expression(strExpr, false);
int v = expr.eval().answer().toInteger();

// Can also create a general solution to a * ( b + c)
strExpr ="a * (b + c)";
expr = Compile.expression(strExpr, false);
v = expr.eval(5, 2, 1).answer().toInteger();
// Now solve 16 * (10 - 5)
v = expr.eval(16, 10, -5).answer().toInteger();

should be enough to get you started.


I have no idea whether the OP made use of Jasmine but this discussion made me revisit the library and play with Java bytecode again.

So I have updated the library with new examples (only two before :innocent:) and added some new methods to those recognised by Jasmine.

Anyway you should be able to install Jasmine 1.1 through the Contributions Manager in a couple of days.


Yes in the end I made use of it! I’m exited to see the other features the library has to offer!