Java计算字符串中的数学表达式的值算法怎么写?

String str = "12+8/4-5+3*4";
请问类似这样的字符串表达式,怎么能算出最终的值,求高手解答,谢谢了

代码网上很多,只说说算法吧
12+8/4-5+(3-4)

把这样的表达式拆成:(操作数)(操作符) 、
12+
8/
4-
5+(
3-
4)
(术语叫做逆波兰式)
默认的计算顺序是从左往右,记为left。另设从右往左,记为right
设计Element类,具有 操作数 operant, 操作符operator, 操作顺序 order三个属性
用两个先进后出的栈结构Stack<Element> a,b;
一开始所有的Element都在a中,逐个弹出计算合并值,
当遇到乘、除、括号时计算顺序改变成right,把当前结果放到b中暂存。
直到再次遇到加、减、)右括号时,意味计算顺序复位成left,先把b中的暂存结果全部合并后,再继续算a中的剩余数据
最后合并成一个结果值。
温馨提示:内容为网友见解,仅供参考
第1个回答  2021-07-01
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");
String str = "(10+20-3)/9";
Object eval = null;
try {
eval = scriptEngine.eval(str);
} catch (ScriptException e) {
e.printStackTrace();
}
System.out.println("表达式"+ str + "运算的结果是:" + eval);

表达式(10+20-3)/9运算的结果是:3

...函数?目的是计算一个字符串类型的数学表达式的值
public class Test {public static void main(String[] args) throws ScriptException {ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine se = manager.getEngineByName("js");String str = "1+2*(3+6)-5\/2";Double result =(Double) se.eval(str);System.out.println(result...

java 字符串"a+b\/(b*d)" 怎么获取a,b,c,d的值 然后按照这个计算公式计 ...
题目表达不清晰。一楼的答案有多准确???abcd只能是个位数??假设abcd分别是1,11,111,1111呢??=== 用正则表达式获取4个整数,然后计算 public int calc(String str){ Pattern ppp=Pattern.compile("\\\\d");Matcher mmm=ppp.matcher(str);int[] aa=new int[4];for(int i=0;mmm.find()...

...=108 个; 请问 鸡=? 兔子=?求Java里怎么算?数学里呢?
public static void main(String[] args) { for(int chicken = 0;chicken < 48;chicken ++){ int rabbit = 48 - chicken;if(chicken*2 + rabbit*4 == 108){ System.out.println("chicken的数量: "+chicken + " rabbit的数量:"+rabbit);} } } ...

java怎样计算一个String类型的数学表达式
只有自己实现一个方法了,先将这类表达式转换成逆波兰式表达式,再使用栈进行计算,实现起来是有一定难度的,特别是其中还夹杂着幂、乘、除、括号等有先后运算顺序的运算符。

在java中1%2等于多少?
在Java中,表达式 `1%2` 的结果是 `1`。这意味着当我们将数字 `1` 除以数字 `2` 时,结果有余数。在这种情况下,余数就是 `%` 操作符返回的值。在这种情况下,由于 `1` 被 `2` 除,余数是 `1`。这就是为什么结果是 `1` 的原因。对于整数除法来说,如果被除数小于除数,则结果为零...

java问题byte a=1,b=1;byte c=a+b;为什么错
在java中,对char, byte和short类型的字符串进行数学算法操作,比如+,-,>>位移操作,都会引发 自动类型提升,结果将是int类型,a+b的结果是int, 要将int的值赋给byte就必须进行类型强制转换。以下这句,是从think in java 3rd中摘出来的,希望对你有帮助。In char, byte, and short, you can ...

脚本语言系列之Java | Java中的运算符
`(关系表达式)?表达式1:表达式2;`。例如:`int num = 10; int result = (num > 5) ? 1 : 0;`,这将根据`num`的值选择执行`1`或`0`。以上就是Java中的常见运算符,理解这些运算符对于编写高效、清晰的代码至关重要。通过实践和应用这些运算符,你可以更灵活地控制程序的流程和功能。

java怎么统计字符串内的标点符号?
java中标点字符包括非字母、数字的字符。\\x0d\\x0a用正则表达式比较简单,思路:把所有的标点替换成",",然后分割",",统计分割的次数。\\x0d\\x0astr = str.replaceAll("[\\\\pP‘’“”]", ",");\\x0d\\x0a\\x0d\\x0a\\pP 其中的小写 p 是 property 的意思,表示 Unicode 属性,用于 ...

使用JAVA从字符串中提取出符合要求的部分
public class ClassExample1 {public static void main(String args[]) {\/\/ 定义地址库List<String> cities = new ArrayList<String>();\/\/ 填充数据 ...cities.add("上海");cities.add("芜湖");\/\/ 待测数据String arg = "东华大学信息科学与技术学院,上海,201620;安徽师范大学数学计算机学院,...

用java怎么输入数学表达式:以2为底的log。Math类里没法直接输入_百度知 ...
在java中求log2N,首先要弄明白一个初中学到的公式log2N=logeN\/loge2,logeN代表以e为底的N的对数,loge2代表以e为底的2的对数.在java.lang.math类中的log(double a)代表以e为底的a的对数,因此log2N在Java中的表示为:log((double)N)\/log((double)2)...

相似回答