问题
We use the Jeks parser at present to evaluate expressions. I cannot see a way to evaluate string expressions with it - for example:
IF( "Test 1" = "Test 2")
Is there anything out there that can evaluate string and mathematical expressions in Java? Preferably free or open source.
Thanks for any help,
Andez
回答1:
There are a lot of tools out there to evaluate expressions; the correct answer will depend on your exact goals.
Two things that I'd look at:
- Commons EL, which evaluates JSP 2.0 expression language.
- Rhino, which evaluates JavaScript (I think this is part of JDK 1.6, but haven't used it as such).
回答2:
The answer was a posting on the Jeks forum. I got an answer from Manu. I thought it was not active especially as I could not register on it - but that got sorted.
But if anyone has the same problem then the following lines of code will get it working:
ExpressionParser parser; // we did have = new ExpressionParser(new JeksExpressionSyntax(), null);
JeksInterpreter interpreter; //
And to create the interpreter:
interpreter = new JeksInterpreter() {
@Override
public Object getBinaryOperatorValue (Object binaryOperatorKey, Object param1, Object param2)
{
// Only functions may take a cell set as parameter
if ( param1 instanceof JeksCellSet || param2 instanceof JeksCellSet)
throw new IllegalArgumentException ();
// Enabled comparison between any type supported by Jeks
else if (binaryOperatorKey.equals (JeksExpressionSyntax.OPERATOR_EQUAL))
return param1 != null && param1.equals (param2)
? Boolean.TRUE : Boolean.FALSE;
// Enabled comparison between any type supported by Jeks
else if (binaryOperatorKey.equals (JeksExpressionSyntax.OPERATOR_DIFFERENT))
return param1 != null && param1.equals (param2) ? Boolean.FALSE : Boolean.TRUE;
else
return super.getBinaryOperatorValue (binaryOperatorKey, param1, param2);
}
};
parser = new ExpressionParser(new JeksExpressionSyntax(), null);
来源:https://stackoverflow.com/questions/3832323/java-string-and-mathematical-expression-evaluators