JAVA-表达式解析&;评价图书馆
我正在寻找一个JAVA库来解析和计算表达式。我搜索并尝试了一些库,比如Apache的JEXL和Jeval,但它们并不是我所需要的 我的要求:JAVA-表达式解析&;评价图书馆,java,expression,Java,Expression,我正在寻找一个JAVA库来解析和计算表达式。我搜索并尝试了一些库,比如Apache的JEXL和Jeval,但它们并不是我所需要的 我的要求: 支持所有值类型(即int、double、boolean、String等) 支持所有已知的数学和逻辑运算符(+、-、*,,如果找不到实际的Java表达式求值库,您可以选择以下几种解决方案: 使用XPath计算表达式。 优点:XPath知道逻辑运算符,您可以使用Xalan的扩展实现变量和自定义函数 缺点:XPath的类型比Java少 使用JavaScri
- 使用XPath计算表达式。
- 优点:XPath知道逻辑运算符,您可以使用Xalan的扩展实现变量和自定义函数
- 缺点:XPath的类型比Java少
- 使用JavaScript计算表达式。
- 优点:Javascript非常灵活,在您的需求紧张时仍然适用。您也可以使用Javascript实现变量和自定义函数
- 缺点:Javascript的类型比Java少
- 使用JSP的表达式语言评估表达式(例如,使用)
import org.mariuszgromada.math.mxparser.*;
...
...
Constant T = new Constant("T = 1");
Constant F = new Constant("F = 0");
Expression e = new Expression("T && (F || (F && T))", T, F);
System.out.println(e.getExpressionString() + " = " + e.calculate());
结果:
T && (F || (F && T)) = 0.0
Help content:
2. + <Operator> addition
3. - <Operator> subtraction
4. * <Operator> multiplication
5. / <Operator> division
6. ^ <Operator> exponentiation
7. ! <Operator> factorial
8. # <Operator> modulo function
9. & <Boolean Operator> logical conjunction (AND)
10. && <Boolean Operator> logical conjunction (AND)
11. /\ <Boolean Operator> logical conjunction (AND)
12. ~& <Boolean Operator> NAND - Sheffer stroke
13. ~&& <Boolean Operator> NAND - Sheffer stroke
14. ~/\ <Boolean Operator> NAND - Sheffer stroke
15. | <Boolean Operator> logical disjunction (OR)
16. || <Boolean Operator> logical disjunction (OR)
17. \/ <Boolean Operator> logical disjunction (OR)
18. ~| <Boolean Operator> logical NOR
19. ~|| <Boolean Operator> logical NOR
20. ~\/ <Boolean Operator> logical NOR
21. (+) <Boolean Operator> exclusive or (XOR)
22. --> <Boolean Operator> implication (IMP)
23. <-- <Boolean Operator> converse implication (CIMP)
24. -/> <Boolean Operator> material nonimplication (NIMP)
25. </- <Boolean Operator> converse nonimplication (CNIMP)
26. <-> <Boolean Operator> logical biconditional (EQV)
27. ~ <Boolean Operator> negation
28. ¬ <Boolean Operator> negation
162. add <Variadic Function> (2.4) Summation operator add(a1,a2,a3,...,an)
168. sum <Calculus Operator> summation operator (SIGMA) sum(i, from, to, f(i,...))
169. prod <Calculus Operator> product operator (PI) prod(i, from, to, f(i,...))
170. int <Calculus Operator> definite integral operator ( int(f(x,...), x, a, b) )
171. der <Calculus Operator> derivative operator ( der(f(x,...), x) )
172. der- <Calculus Operator> left derivative operator ( der-(f(x,...), x) )
173. der+ <Calculus Operator> right derivative operator ( der+(f(x,...), x) )
174. dern <Calculus Operator> n-th derivative operator ( dern(f(x,...), x) )
175. diff <Calculus Operator> forward difference operator
176. difb <Calculus Operator> backward difference operator
177. avg <Calculus Operator> (2.4) Average operator avg(i, from, to, f(i,...))
178. vari <Calculus Operator> (2.4) Bias-corrected sample variance operator vari(i, from, to, f(i,...))
179. stdi <Calculus Operator> (2.4) Bias-corrected sample standard deviation operator stdi(i, from, to, f(i,...))
180. mini <Calculus Operator> (2.4) Minimum value mini(i, from, to, f(i,...))
181. maxi <Calculus Operator> (2.4) Maximum value maxi(i, from, to, f(i,...))
182. solve <Calculus Operator> (4.0) f(x) = 0 equation solving, function root finding: solve( f(x,...), x, a, b )
301. @~ <Bitwise Operator> (4.0) Bitwise unary complement
302. @& <Bitwise Operator> (4.0) Bitwise AND
303. @^ <Bitwise Operator> (4.0) Bitwise exclusive OR
304. @| <Bitwise Operator> (4.0) Bitwise inclusive OR
305. @<< <Bitwise Operator> (4.0) Signed left shift
306. @>> <Bitwise Operator> (4.0) Signed right shift
x/y = 5.0
import org.mariuszgromada.math.mxparser.*;
...
...
mXparser.consolePrintHelp("operator");
import org.mariuszgromada.math.mxparser.*;
...
...
Argument x = new Argument("x = 10");
Constant y = new Constant("y = 2");
Expression e = new Expression("x/y", x, y);
System.out.println(e.getExpressionString() + " = " + e.calculate());
结果:
T && (F || (F && T)) = 0.0
Help content:
2. + <Operator> addition
3. - <Operator> subtraction
4. * <Operator> multiplication
5. / <Operator> division
6. ^ <Operator> exponentiation
7. ! <Operator> factorial
8. # <Operator> modulo function
9. & <Boolean Operator> logical conjunction (AND)
10. && <Boolean Operator> logical conjunction (AND)
11. /\ <Boolean Operator> logical conjunction (AND)
12. ~& <Boolean Operator> NAND - Sheffer stroke
13. ~&& <Boolean Operator> NAND - Sheffer stroke
14. ~/\ <Boolean Operator> NAND - Sheffer stroke
15. | <Boolean Operator> logical disjunction (OR)
16. || <Boolean Operator> logical disjunction (OR)
17. \/ <Boolean Operator> logical disjunction (OR)
18. ~| <Boolean Operator> logical NOR
19. ~|| <Boolean Operator> logical NOR
20. ~\/ <Boolean Operator> logical NOR
21. (+) <Boolean Operator> exclusive or (XOR)
22. --> <Boolean Operator> implication (IMP)
23. <-- <Boolean Operator> converse implication (CIMP)
24. -/> <Boolean Operator> material nonimplication (NIMP)
25. </- <Boolean Operator> converse nonimplication (CNIMP)
26. <-> <Boolean Operator> logical biconditional (EQV)
27. ~ <Boolean Operator> negation
28. ¬ <Boolean Operator> negation
162. add <Variadic Function> (2.4) Summation operator add(a1,a2,a3,...,an)
168. sum <Calculus Operator> summation operator (SIGMA) sum(i, from, to, f(i,...))
169. prod <Calculus Operator> product operator (PI) prod(i, from, to, f(i,...))
170. int <Calculus Operator> definite integral operator ( int(f(x,...), x, a, b) )
171. der <Calculus Operator> derivative operator ( der(f(x,...), x) )
172. der- <Calculus Operator> left derivative operator ( der-(f(x,...), x) )
173. der+ <Calculus Operator> right derivative operator ( der+(f(x,...), x) )
174. dern <Calculus Operator> n-th derivative operator ( dern(f(x,...), x) )
175. diff <Calculus Operator> forward difference operator
176. difb <Calculus Operator> backward difference operator
177. avg <Calculus Operator> (2.4) Average operator avg(i, from, to, f(i,...))
178. vari <Calculus Operator> (2.4) Bias-corrected sample variance operator vari(i, from, to, f(i,...))
179. stdi <Calculus Operator> (2.4) Bias-corrected sample standard deviation operator stdi(i, from, to, f(i,...))
180. mini <Calculus Operator> (2.4) Minimum value mini(i, from, to, f(i,...))
181. maxi <Calculus Operator> (2.4) Maximum value maxi(i, from, to, f(i,...))
182. solve <Calculus Operator> (4.0) f(x) = 0 equation solving, function root finding: solve( f(x,...), x, a, b )
301. @~ <Bitwise Operator> (4.0) Bitwise unary complement
302. @& <Bitwise Operator> (4.0) Bitwise AND
303. @^ <Bitwise Operator> (4.0) Bitwise exclusive OR
304. @| <Bitwise Operator> (4.0) Bitwise inclusive OR
305. @<< <Bitwise Operator> (4.0) Signed left shift
306. @>> <Bitwise Operator> (4.0) Signed right shift
x/y = 5.0
结果:
T && (F || (F && T)) = 0.0
Help content:
2. + <Operator> addition
3. - <Operator> subtraction
4. * <Operator> multiplication
5. / <Operator> division
6. ^ <Operator> exponentiation
7. ! <Operator> factorial
8. # <Operator> modulo function
9. & <Boolean Operator> logical conjunction (AND)
10. && <Boolean Operator> logical conjunction (AND)
11. /\ <Boolean Operator> logical conjunction (AND)
12. ~& <Boolean Operator> NAND - Sheffer stroke
13. ~&& <Boolean Operator> NAND - Sheffer stroke
14. ~/\ <Boolean Operator> NAND - Sheffer stroke
15. | <Boolean Operator> logical disjunction (OR)
16. || <Boolean Operator> logical disjunction (OR)
17. \/ <Boolean Operator> logical disjunction (OR)
18. ~| <Boolean Operator> logical NOR
19. ~|| <Boolean Operator> logical NOR
20. ~\/ <Boolean Operator> logical NOR
21. (+) <Boolean Operator> exclusive or (XOR)
22. --> <Boolean Operator> implication (IMP)
23. <-- <Boolean Operator> converse implication (CIMP)
24. -/> <Boolean Operator> material nonimplication (NIMP)
25. </- <Boolean Operator> converse nonimplication (CNIMP)
26. <-> <Boolean Operator> logical biconditional (EQV)
27. ~ <Boolean Operator> negation
28. ¬ <Boolean Operator> negation
162. add <Variadic Function> (2.4) Summation operator add(a1,a2,a3,...,an)
168. sum <Calculus Operator> summation operator (SIGMA) sum(i, from, to, f(i,...))
169. prod <Calculus Operator> product operator (PI) prod(i, from, to, f(i,...))
170. int <Calculus Operator> definite integral operator ( int(f(x,...), x, a, b) )
171. der <Calculus Operator> derivative operator ( der(f(x,...), x) )
172. der- <Calculus Operator> left derivative operator ( der-(f(x,...), x) )
173. der+ <Calculus Operator> right derivative operator ( der+(f(x,...), x) )
174. dern <Calculus Operator> n-th derivative operator ( dern(f(x,...), x) )
175. diff <Calculus Operator> forward difference operator
176. difb <Calculus Operator> backward difference operator
177. avg <Calculus Operator> (2.4) Average operator avg(i, from, to, f(i,...))
178. vari <Calculus Operator> (2.4) Bias-corrected sample variance operator vari(i, from, to, f(i,...))
179. stdi <Calculus Operator> (2.4) Bias-corrected sample standard deviation operator stdi(i, from, to, f(i,...))
180. mini <Calculus Operator> (2.4) Minimum value mini(i, from, to, f(i,...))
181. maxi <Calculus Operator> (2.4) Maximum value maxi(i, from, to, f(i,...))
182. solve <Calculus Operator> (4.0) f(x) = 0 equation solving, function root finding: solve( f(x,...), x, a, b )
301. @~ <Bitwise Operator> (4.0) Bitwise unary complement
302. @& <Bitwise Operator> (4.0) Bitwise AND
303. @^ <Bitwise Operator> (4.0) Bitwise exclusive OR
304. @| <Bitwise Operator> (4.0) Bitwise inclusive OR
305. @<< <Bitwise Operator> (4.0) Signed left shift
306. @>> <Bitwise Operator> (4.0) Signed right shift
x/y = 5.0
另外,请检查:a)、b)
import org.mariuszgromada.math.mxparser.*;
...
...
Function f = new Function("f(x,y) = x*y");
Expression e = new Expression("20-f(2,5)",f);
System.out.println(e.getExpressionString() + " = " + e.calculate());
结果1
20-f(2,5) = 10.0
示例2-通过您自己的实现扩展的主体:
import org.mariuszgromada.math.mxparser.*;
...
...
/*
* Implementing FunctionExtension interface
*/
public class Addition implements FunctionExtension {
double x;
double y;
public Addition() {
x = Double.NaN;
y = Double.NaN;
}
public Addition(double x, double y) {
this.x = x;
this.y = y;
}
public int getParametersNumber() {
return 2;
}
public void setParameterValue(int argumentIndex, double argumentValue) {
if (argumentIndex == 0) x = argumentValue;
if (argumentIndex == 1) y = argumentValue;
}
public double calculate(double... params) {
return x+y;
}
public FunctionExtension clone() {
return new Addition(x, y);
}
}
/*
* Creating extended function
*/
Function f = new Function("f", new Addition());
mXparser.consolePrintln("f.calculate(1,2) = " + f.calculate(1,2) );
/*
* Using extended function in expression
*/
Expression e = new Expression("f(2,3)", f);
System.out.println(e.getExpressionString() + " = " + e.calculate() );
结果2:
f.calculate(1,2) = 3.0
f(2,3) = 5.0
此外,值得关注整个
最近发现-如果您想尝试语法(并查看高级用例),可以下载mXparser支持的
致以最诚挚的问候您是否考虑过内置Java脚本引擎?这确实是一个令人印象深刻的库,至少从他们声称的doSadly功能来看,pow不受其支持。@ShoaibChikate您只需编写x^y-这与pow(x,y)相同