Java 将字符串表达式计算为整数?

Java 将字符串表达式计算为整数?,java,stack,stringtokenizer,Java,Stack,Stringtokenizer,我试图将字符串从左到右计算为一个整数,数字介于0-9和四个基本运算符之间(如“5+8+(8/4)”应计算为15或“9+((3+4)*5)”应计算为44或“4+2*6”36,因为所有运算符具有相同的优先级,所以首先计算4+2),但是我在实现括号时遇到了困难 如果不加括号的话,我已经设法让它工作了。我通过在while循环中使用StringTokenizer解析字符串来实现这一点。每个标记都存储在一个变量中,如果它包含一个数字,则将其添加到堆栈中;如果它包含一个运算符,则将其添加到堆栈中。然后,当整数

我试图将字符串从左到右计算为一个整数,数字介于0-9和四个基本运算符之间(如
“5+8+(8/4)”
应计算为
15
“9+((3+4)*5)”
应计算为
44
“4+2*6”
36,因为所有运算符具有相同的优先级,所以首先计算4+2),但是我在实现括号时遇到了困难

如果不加括号的话,我已经设法让它工作了。我通过在while循环中使用StringTokenizer解析字符串来实现这一点。每个标记都存储在一个变量中,如果它包含一个数字,则将其添加到堆栈中;如果它包含一个运算符,则将其添加到堆栈中。然后,当整数堆栈中有两个数字时,我根据运算符堆栈中的运算符计算它们。整个字符串都是这样,直到
str.hasMoreTokens()
为真,while循环中断。因此,类似于
8-5+7*3+1/2-4
的方法非常有效,但我找不到一种方法使括号适用于任何表达式

我已经尝试使用
String newStr=str.replaceFirst(“[^(]*(“,”);
尝试切断所有内容,包括第一个
然后递归地计算剩余的值等等,但我认为这比必须的要复杂得多,而且无论如何我都无法让它工作。我已经思考了几个小时,但我想不出更简单的方法


谢谢,我在这一点上完全迷路了,所以任何指导/建议都很好。

如果你想用中缀符号解析数学表达式,你需要实现调车场。看不到你的代码,很难说遗漏了什么。

如果其他答案对你的项目来说太复杂,我建议你试试inte在您的代码中添加Groovy脚本引擎。它可以轻松地完成所有这一切,甚至更多

如果您需要它以java代码的速度工作,而不是自己解析表达式,那么它还允许您动态编译java类


8-5+7*3+1/2-4真的能很好地工作吗?乘法和除法的优先级比加法和除法高吗subtraction@AmirAfghani是的,它工作得很好。不,它们都有相同的优先级。它从左到右直接读取,所以4+2*6是36。从技术上讲,这是错误的-可以吗?我建议使用dropincc来避免reinv赋予方向盘。是一个很好的参考。你说它错了是什么意思?我只是说将表达式作为字符串输入是可以的。我没有列出该字符串的输出。编辑:如果你的意思是乘法在技术上与加法的优先级不同,那么是的,没关系。怎么回事?他需要使用调车场算法。我知道在我回答之前,我想他不知道。这似乎和我正在寻找的东西很相似。你知道一个例子吗?每个操作符的优先级都是相同的?事实上,它很长,对我来说,很难理解,这应该只需要大约100行代码。我的答案是+1,因为我认为这是一个很好的答案这正是缺少的,这正是一个初学者在尝试自己实现表达式求值时所面临的问题。