您的位置:首页 > 其它

Jep解析字符串数学公式

2016-06-21 17:16 375 查看
如果是一般公式,使用Jep很容易实现计算得到结果。

[java]
view plain
copy
print?

String str = "6+7+8-9"; 

Jep jep = new Jep(); 
jep.parse(str); 
System.out.println(jep.evaluate()); 

String str = "6+7+8-9";
Jep jep = new Jep();
jep.parse(str);
System.out.println(jep.evaluate());
默认情况下,Jep支持的符号列表如下:

  DoubleComplexStringVector
Power^  
Boolean Not!   
Unary Plus, Unary Minus+x, -x  
Dot product, cross product., ^^   
Modulus%   
Division/ 
Multiplication* 
Addition, Subtraction+, -(only +)
Less or Equal, More or Equal< =, >=  
Less Than, Greater Than< , >  
Not Equal, Equal!=, == 
Boolean And&&   
Boolean Or||   
Assignment=
但是一般符号满足不了需求,公式中有比如 x++与a>b?c:d之类的公式,默认的解析明显不支持,想要支持,需要拓展。

支持Java风格公式:

[java]
view plain
copy
print?

String str = "3>4?1:2"; 

Jep jep = new Jep(); 
jep.setComponents(new StandardConfigurableParser(),new JavaOperatorTable()); 

jep.parse(str); 
System.out.println(jep.evaluate()); 

String str = "3>4?1:2";
Jep jep = new Jep();
jep.setComponents(new StandardConfigurableParser(),new JavaOperatorTable());
jep.parse(str);
System.out.println(jep.evaluate());
上面代码额外支持的操作符如下:
 Standard symbolBitwise

OperatorTable
Java

OperatorTable
Arguments
Bitwise and&[align=center][/align]
[align=center][/align]
Integer
Bitwise or|[align=center][/align]
[align=center][/align]
Integer
Bitwise xor^*[align=center][/align]
[align=center][/align]
Integer
Bitwise complement~[align=center][/align]
[align=center][/align]
Integer
Leftshift<<[align=center][/align]
[align=center][/align]
Integer
Signed rightshift>>[align=center][/align]
[align=center][/align]
Integer
Unsigned rightshift>>>[align=center][/align]
[align=center][/align]
Integer
Pre-increment/decrement++x, --x[align=center][/align]
[align=center][/align]
Double variable
Post-increment/decrementx++, x--[align=center][/align]
[align=center][/align]
Double variable
Conditional?:[align=center][/align]
[align=center][/align]
Double
Assignment+=, -=, *=, /=, %=[align=center][/align]
[align=center][/align]
Double
Bitwise assignment& =, |=, ^=, <<=, >>=, >>>=[align=center][/align]
[align=center][/align]
Integer
公式里一般不会全是常量,需要对公式里的变量赋值:

[java]
view plain
copy
print?

String str = "a>b?1:2"; 

Jep jep = new Jep(); 
jep.setComponents(new StandardConfigurableParser(),new JavaOperatorTable()); 

jep.addVariable("a", 3); 

jep.addVariable("b",
4); 
jep.parse(str); 
System.out.println(jep.evaluate()); 

String str = "a>b?1:2";
Jep jep = new Jep();
jep.setComponents(new StandardConfigurableParser(),new JavaOperatorTable());
jep.addVariable("a", 3);
jep.addVariable("b", 4);
jep.parse(str);
System.out.println(jep.evaluate());


有些字符是保留作为默认值的,不能当做变量:
pi3.1415... The ratio of the circumference of a circle to its diameter (Math.PI )
e2.718... Euler's constant in double precision (Math.E)
trueThe boolean constant (Boolean.TRUE)
falseThe boolean constant (Boolean.FALSE)
iThe complex imaginary unit
Jep还支持自定义公式、使用复杂的数学公式.....。由于上面已经满足项目要求,并且这玩意没源码,方法都要一个个试过去,比较耗时,故而没继续试下去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: