Jep解析字符串数学公式
如果是一般公式,使用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 | = |
但是一般符号满足不了需求,公式中有比如 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 symbol |
Bitwise OperatorTable |
Java OperatorTable |
Arguments | |
---|---|---|---|---|
Bitwise and | & | Integer | ||
Bitwise or | | | Integer | ||
Bitwise xor | ^* | Integer | ||
Bitwise complement | ~ | Integer | ||
Leftshift | << | Integer | ||
Signed rightshift | >> | Integer | ||
Unsigned rightshift | >>> | Integer | ||
Pre-increment/decrement | ++x, --x | Double variable | ||
Post-increment/decrement | x++, x-- | Double variable | ||
Conditional | ?: | Double | ||
Assignment | +=, -=, *=, /=, %= | Double | ||
Bitwise assignment | & =, |=, ^=, <<=, >>=, >>>= | 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 |
Jep还支持自定义公式、使用复杂的数学公式.....。由于上面已经满足项目要求,并且这玩意没源码,方法都要一个个试过去,比较耗时,故而没继续试下去。
最后欢迎大家访问我的个人网站: 1024s
Jep解析字符串数学公式相关推荐
- JAVA解析字符串数学公式
在最近工作中遇到需要处理可变的数学算法,我本次使用的是jep来解析字符串公式,来达到应对可变的目的. 1:首先,在使用jep之前先引入需要的jar <!--jep--><depend ...
- [转]解析字符串的方法
解析字符串的方法 char st[]="123.45ab"; 解析这一段字符串,有很多种方法.这里介绍一个在"stdio.h"里面的函数: sscanf(-); ...
- java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...
1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...
- java---编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得。
题目: 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数组为: d[0][0]=1 d[0][1]=2 ...
- 数组元素数组中的元素通过解析字符串参数获得
返回数组,数组元素数组中的元素通过解析字符串参数获得 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数 ...
- Jsoup介绍||jsoup解析url || Jsoup解析字符串||Jsoup解析文件
Jsoup 抓取到页面之后,还需要对页面进行解析.可以使用字符串处理工具解析页面,也可以使用正则表达式,但是这些方法都会带来很大的开发成本,所以我们需要使用一款专门解析html页面的技术. jsoup ...
- 使用Golang flag包解析字符串
本篇文章主要介绍如何使用flag包解析字符串,没有介绍flag包的详细使用,需要学习flag包如何使用的同学可以参考如下这篇文章: Go语言中使用flag包对命令行进行参数解析的方法 https:// ...
- QT如何实现对于字符串数学公式计算
QT如何实现对于字符串数学公式计算 第一步: 在.pro文件中加入 QT += script 第二步: 在.h头文件中添加 #include 第三步: QScriptEngine scriptEngi ...
- java解析字符串_用Java解析字符串有哪些不同的方法?
用Java解析字符串有哪些不同的方法? 对于解析播放器命令,我最常使用split方法通过定界符对字符串进行分割,然后再通过一系列ifs或switches找出其余部分. Java中解析字符串的几种不同方 ...
最新文章
- NeHe教程Qt实现——lesson06
- matlab6432有什么区别,在同一台机器上使用Matlab 32和64位,如何在不同的地方存储设置?...
- 在JavaScript函数中使用EL表达式注意的事项
- java 变参 使用数组调用_java中的可变参数使用方法
- Session保存到Memcache
- Vue分支循环结构~非常详细哦
- 常见服务器返回的错误代码(转)
- 12篇学通C#网络编程——第一篇 基础之进程线程(转)
- 【POJ 3276】【开关问题】Face The Right Way【暑期 No.4】
- 为什么你买不到一台好用的机器人?因为没有你的代码
- Android安卓 自定义mapbox地图比例尺
- Paypal快速支付接口参数的含义
- CountDownLatch:别浪,等人齐再团!
- Rxjava Subject分析
- Oracle Data Integrator(ODI)架构
- 2 PC 有它,你就够了!
- 我为什么选择使用Go语言?
- 【论文精读】2016-CVPR-Learning temporal regularity in video sequences
- 2022年五大人工智能自动化趋势
- Films have seen