Search code examples
javastringexpressionevaluator

Java String and Mathematical Expression Evaluators


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.


Solution

  • 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);