如果是一般公式,使用Jep很容易实现计算得到结果。

[java] view plain copy print?

  1. String str = "6+7+8-9";
  2. Jep jep = new Jep();
  3. jep.parse(str);
  4. 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?

  1. String str = "3>4?1:2";
  2. Jep jep = new Jep();
  3. jep.setComponents(new StandardConfigurableParser(),new JavaOperatorTable());
  4. jep.parse(str);
  5. 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?

  1. String str = "a>b?1:2";
  2. Jep jep = new Jep();
  3. jep.setComponents(new StandardConfigurableParser(),new JavaOperatorTable());
  4. jep.addVariable("a", 3);
  5. jep.addVariable("b", 4);
  6. jep.parse(str);
  7. 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解析字符串数学公式相关推荐

  1. JAVA解析字符串数学公式

    在最近工作中遇到需要处理可变的数学算法,我本次使用的是jep来解析字符串公式,来达到应对可变的目的. 1:首先,在使用jep之前先引入需要的jar <!--jep--><depend ...

  2. [转]解析字符串的方法

    解析字符串的方法 char st[]="123.45ab"; 解析这一段字符串,有很多种方法.这里介绍一个在"stdio.h"里面的函数: sscanf(-); ...

  3. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

  4. java---编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得。

    题目: 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数组为: d[0][0]=1 d[0][1]=2 ...

  5. 数组元素数组中的元素通过解析字符串参数获得

    返回数组,数组元素数组中的元素通过解析字符串参数获得 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数 ...

  6. Jsoup介绍||​​​​​​​jsoup解析url || Jsoup解析字符串||​​​​​​​Jsoup解析文件

    Jsoup 抓取到页面之后,还需要对页面进行解析.可以使用字符串处理工具解析页面,也可以使用正则表达式,但是这些方法都会带来很大的开发成本,所以我们需要使用一款专门解析html页面的技术. jsoup ...

  7. 使用Golang flag包解析字符串

    本篇文章主要介绍如何使用flag包解析字符串,没有介绍flag包的详细使用,需要学习flag包如何使用的同学可以参考如下这篇文章: Go语言中使用flag包对命令行进行参数解析的方法 https:// ...

  8. QT如何实现对于字符串数学公式计算

    QT如何实现对于字符串数学公式计算 第一步: 在.pro文件中加入 QT += script 第二步: 在.h头文件中添加 #include 第三步: QScriptEngine scriptEngi ...

  9. java解析字符串_用Java解析字符串有哪些不同的方法?

    用Java解析字符串有哪些不同的方法? 对于解析播放器命令,我最常使用split方法通过定界符对字符串进行分割,然后再通过一系列ifs或switches找出其余部分. Java中解析字符串的几种不同方 ...

最新文章

  1. NeHe教程Qt实现——lesson06
  2. matlab6432有什么区别,在同一台机器上使用Matlab 32和64位,如何在不同的地方存储设置?...
  3. 在JavaScript函数中使用EL表达式注意的事项
  4. java 变参 使用数组调用_java中的可变参数使用方法
  5. Session保存到Memcache
  6. Vue分支循环结构~非常详细哦
  7. 常见服务器返回的错误代码(转)
  8. 12篇学通C#网络编程——第一篇 基础之进程线程(转)
  9. 【POJ 3276】【开关问题】Face The Right Way【暑期 No.4】
  10. 为什么你买不到一台好用的机器人?因为没有你的代码
  11. Android安卓 自定义mapbox地图比例尺
  12. Paypal快速支付接口参数的含义
  13. CountDownLatch:别浪,等人齐再团!
  14. Rxjava Subject分析
  15. Oracle Data Integrator(ODI)架构
  16. 2 PC 有它,你就够了!
  17. 我为什么选择使用Go语言?
  18. 【论文精读】2016-CVPR-Learning temporal regularity in video sequences
  19. 2022年五大人工智能自动化趋势
  20. Films have seen

热门文章

  1. Spring定时任务的Demo
  2. 学习前端比较好的网站
  3. Java-JFR-民间指南---事件详解---jdk-ThreadAllocationStatistics
  4. RobotStudio仿真—Smart组件创建动态夹具
  5. history查看历史命令,并显示运行时间
  6. 基于单片机的贪吃蛇设计
  7. java中处理换行符
  8. Fixed Effect
  9. docker 安装node
  10. virtualenv虚拟环境中安装MySQL-python