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());
但是一般符号满足不了需求,公式中有比如 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());
公式里一般不会全是常量,需要对公式里的变量赋值:
[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());
有些字符是保留作为默认值的,不能当做变量:
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支持的符号列表如下:
Double | Complex | String | Vector | ||
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 | = |
支持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 symbol | Bitwise 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/decrement | x++, 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());
有些字符是保留作为默认值的,不能当做变量:
pi | 3.1415... The ratio of the circumference of a circle to its diameter (Math.PI ) |
e | 2.718... Euler's constant in double precision (Math.E) |
true | The boolean constant (Boolean.TRUE) |
false | The boolean constant (Boolean.FALSE) |
i | The complex imaginary unit |
相关文章推荐
- 方法:一个简单的读取配置文件.properties的工具类 JAVA
- This关键字和Super关键字
- Android Matrix矩阵详解
- createNewFile()与createTempFile()的不同
- 现有发房业务的优化(职责链的应用)
- 大数据相关内容资料收集
- lua 堆栈
- boost 1.56.0 编译及使用
- DNS的解析杂谈,以及gethostbyname的弊端
- Boost的编译
- linux小组分享会_遗传算法
- 懒加载
- unity3d 平滑看向的脚本
- thymeleaf学习
- OC - 使用AFNetworking进行图片上传
- C++指针详解(一)
- Clion注册码
- 二分查找
- java反射详解
- lag与latency的区别