
或者市面上有没有开箱即用的 jar
例如计算
String str = “1+23-4+(4/2)^25+(4/2)^2*2.222E-6”;
如何计算呢。。
1 Tsukihime Feb 26, 2020 ScriptEngineManager |
2 Perci Feb 26, 2020 via Android 用夹娃实现计算器 |
3 Tsukihime Feb 26, 2020 ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName ("Javascript"); final Object eval = engine.eval("1 + 23 - 4 + (4/2)^25 + (4/2)^2*2.222E-6"); System.out.println(eval); |
4 lqs Feb 26, 2020 内嵌一个 JS 或 Python 解释器(记得先把 ^替换成**) |
5 zjsxwc Feb 26, 2020 这表达式是科学计算器的语法,js 也不支持幂运算,直接调用命令行获取运算结果呗 ``` $octave --eval "1+23-4+(4/2)^25+(4/2)^2*2.222E-6" ans = 3.3554e+07 ``` |
6 zjsxwc Feb 26, 2020 |
8 kerie Feb 26, 2020 ScriptEngineManager 太重了,可以用 exp4j。 https://www.objecthunter.net/exp4j/ |
9 xwbz2018 Feb 26, 2020 via Android <groupId>org.scijava</groupId> <artifactId>jep</artifactId> 我用的这个,可以自定义函数 |
11 liujan Feb 26, 2020 via iPhone qlexpress 试试 |
12 leishi1313 Feb 26, 2020 via Android 老有人说做算法题没用,你把这俩题结合起来不就是你的需求了: https://leetcode.com/problems/valid-number/ https://leetcode.com/problems/basic-calculator-ii/ |
13 qyvlik Feb 26, 2020 可以参考这个项目 https://github.com/qyvlik/formula,支持变量替换计算。 具体是使用 JVM 自带的 ScriptEngine,移除 ScriptEngine 内的 `quit` 等有全局影响的函数, 创建可以参考如下: https://github.com/qyvlik/formula/blob/master/src/main/java/io/github/qyvlik/formula/modules/formula/service/impl/FormulaCalculatorImpl.java#L65 创建指定 "-strict", "--no-java", "--no-syntax-extensions" 参数,创建完毕后,移除不必要的有全局副作用的 js 函数。 此外可以考虑自己练手,使用 一些编译原理、逆波兰表达式等知识,自己实现四则计算器,还可以顺手防止恶意代码注入呢。 |
14 blackFool Feb 26, 2020 com.googlecode.aviator |
15 chocotan Feb 26, 2020 |
16 xyooyx Feb 26, 2020 中序表达式转前序表达式 |
17 jorneyr Feb 26, 2020 也可以调用 Groovy 脚本 |
18 hhhsuan Feb 26, 2020 轮子太多了,一搜一大把,比如这个: https://mathparser.org/ |
19 xupefei Feb 26, 2020 via iPhone |
20 mineqiqi Feb 26, 2020 好像轮子挺多的 |
21 hantsy Feb 26, 2020 @leishi1313 按照以前大学的数据结构课程,字符是不是应该用什么 FIFO 容器存放,一个个字符分析,加减乘除()有优先级不同。 |
22 HuHui Feb 26, 2020 Apache Commons JEXL |
23 ic2y Feb 26, 2020 |
24 Comdex Feb 26, 2020 via iPhone 中缀表达式 |
25 bjrjk Feb 27, 2020 via Android 中缀表达式转后缀表达式再计算结果输出 |
26 leishi1313 Feb 27, 2020 via Android @xupefei 3 要会员 |