请教, Java 对一个字符串进行加减乘除的运算的小小问题

2019-04-15 09:27:57 +08:00
 13192262269
有没有什么函数,表达式可以直接用的?
如:String s = "( 1+2*3 )-10/2";
结果:2
3585 次点击
所在节点    程序员
24 条回复
xlui
2019-04-15 09:34:04 +08:00
据我所知没有,但是你可以搜一搜 中缀表达式转后缀表达式 和 后缀表达式求解。
cnzjl
2019-04-15 09:34:09 +08:00
String s = Integer.toString((1+2*3 )-10/2);
AlisaDestiny
2019-04-15 09:34:57 +08:00
chocotan
2019-04-15 09:36:38 +08:00
lihongjie0209
2019-04-15 09:38:24 +08:00
直接调用 JavaScript 执行引擎?
sigup
2019-04-15 09:42:41 +08:00
```java
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
System.out.println(engine.eval("(1+2*3)-10/2"));

```
不过要做好校验,否则就是后门了
hoosin
2019-04-15 09:55:10 +08:00
@lihongjie0209 JavaScript eval 有安全问题,所以约等于废弃了
HuHui
2019-04-15 10:02:36 +08:00
jexl 完全满足
loveCoding
2019-04-15 10:16:36 +08:00
看看这个库
org.apache.commons:commons-jexl3
loveCoding
2019-04-15 10:16:46 +08:00
@HuHui 没看到你已经发了
lihongjie0209
2019-04-15 10:17:48 +08:00
@hoosin
考虑一下 el 表达式?
或者 eval 之前做过滤?
或者可以设置 js 执行引擎的权限?
lihongjie0209
2019-04-15 10:19:37 +08:00
@hoosin 或者是内嵌一个 groovy 引擎?
BBCCBB
2019-04-15 10:23:56 +08:00
spring 的 spel 模块也可以
nekoneko
2019-04-15 11:30:16 +08:00
可以考虑自己做一个做计算的方法。算法可以参考逆波兰式
rizon
2019-04-15 11:38:50 +08:00
四则运算调用 js 引擎处理也是个选择,甚至通过跑 sql 来计算也是可以的。。
不过常规来说,四则运算解析工具类应该也很多吧。
rizon
2019-04-15 11:43:35 +08:00
stevenbipt
2019-04-15 11:54:10 +08:00
不行自己用两个栈写一个😂😂😂
jlhde123
2019-04-15 12:37:15 +08:00
ANTRL4
liujan
2019-04-15 12:52:21 +08:00
qlexpresss 试下,阿里出的
jinue9900
2019-04-15 13:48:21 +08:00
groovy 可以只要把双引号去掉就 Ok 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/555175

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX