Jep 解析字符串数学公式

本文介绍了如何使用Jep库解析并计算复杂数学表达式,包括标准运算符和Java风格的表达式。通过示例展示了如何自定义公式、设置变量值及支持特殊操作符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        由于项目需要从服务器端传来一个计算公式,客户端根据公式计算得到值,故而学习了一下Jep。

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

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

    Double Complex String Vector
Power ^ Check Check    
Boolean Not ! Check      
Unary Plus, Unary Minus +x, -x Check Check    
Dot product, cross product ., ^^       Check
Modulus % Check      
Division / Check Check   Check
Multiplication * Check Check   Check
Addition, Subtraction +, - Check Check Check (only +) Check
Less or Equal, More or Equal <=, >= Check   Check  
Less Than, Greater Than <, > Check   Check  
Not Equal, Equal !=, == Check Check Check  
Boolean And && Check      
Boolean Or || Check      
Assignment = Check Check Check Check

但是一般符号满足不了需求,公式中有比如 x++与a>b?c:d之类的公式,默认的解析明显不支持,想要支持,需要拓展。

支持java风格公式:

		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 &
Check
Check
Integer
Bitwise or |
Check
Check
Integer
Bitwise xor ^*
Check
Check
Integer
Bitwise complement ~
Check
Check
Integer
Leftshift <<
Check
Check
Integer
Signed rightshift >>
Check
Check
Integer
Unsigned rightshift >>>
Check
Check
Integer
Pre-increment/decrement ++x, --x
Check
Double variable
Post-increment/decrement x++, x--
Check
Double variable
Conditional ?:
Check
Double
Assignment +=, -=, *=, /=, %=
Check
Double
Bitwise assignment &=, |=, ^=, <<=, >>=, >>>=
Check
Integer

公式里一般不会全是常量,需要对公式里的变量赋值:
		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还支持自定义公式、使用复杂的数学公式.....。由于上面已经满足项目要求,并且这玩意没源码,方法都要一个个试过去,比较耗时,故而没继续试下去。

Jep开发包及文档:点击打开链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值