Java String и оценщики математических выражений - PullRequest
1 голос
/ 30 сентября 2010

В настоящее время мы используем анализатор Jeks для оценки выражений. Я не вижу способа оценить строковые выражения с его помощью - например:

IF («Тест 1» = «Тест 2»)

Есть ли что-нибудь, что может вычислять строковые и математические выражения в Java? Желательно бесплатно или с открытым исходным кодом.

Спасибо за любую помощь,

Andez

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

Существует множество инструментов для оценки выражений;правильный ответ будет зависеть от ваших точных целей.

Две вещи, на которые я бы посмотрел:

0 голосов
/ 14 октября 2010

Ответом была публикация на форуме Джекс.Я получил ответ от Ману.Я думал, что он не был активен, особенно потому, что я не мог зарегистрироваться на нем - но он был отсортирован.

Но если у кого-то возникла такая же проблема, тогда следующие строки кода приведут его в действие:

ExpressionParser parser; // we did have = new ExpressionParser(new JeksExpressionSyntax(), null);
JeksInterpreter 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);
...