Если вы хотите оценить результат выражения "(a^b)|c"
, где a
, b
и c
- переменные, определенные выше, просто выполните выражение непосредственно как код Java, как указано в других ответах.
boolean result = (a|b)^c;
Однако, если кто-то действительно хочет оценить выражение, полученное из String
, скажем, когда строка поступает из пользовательского ввода, есть библиотека JExl, которая позволяет вам сделать это:
http://commons.apache.org/proper/commons-jexl/
Добавьте следующие строки в свой maven pom.xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl3</artifactId>
<version>3.1</version>
</dependency>
Вы не тестировали приведенный ниже код, но можете попробовать.
import org.apache.commons.jexl3.*;
JexlEngine jexl = new JexlBuilder().create();
String expression = "(a|b)^c";
JexlExpression jExpression = jexl.createExpression(expression);
// JexlContext stores the values for variables used in an JexlExpression
JexlContext context = new MapContext();
context.set("a", true);
context.set("b", true);
context.set("c", true);
// evaluate expression.
Long result = (Long) jExpression.evaluate(context);
System.out.println(result); // 0 for false
Конечно, производительность будет хуже, чем выполнение кода напрямую, потому что выражение должно быть проанализировано в абстрактном синтаксическом дереве (AST), прежде чем его можно будет оценить.