我正在尝试将字符串从左到右评估为整数,其数字介于 0-9 和四个基本运算符之间(例如"5+8+(8/4)"
应该评估为15
或"9+((3+4)*5)"
as44
或"4+2*6"
36,因为由于所有运算符具有相同的优先级,首先计算 4+2 ),但我在实现括号时遇到了麻烦。
如果我不包括括号,我已经设法让它工作。我通过在 while 循环中使用 StringTokenizer 解析字符串来做到这一点。每个标记都存储在一个变量中,如果它包含一个数字,则将其添加到堆栈中,如果包含运算符,则将其添加到堆栈中。然后,当 Integer 堆栈中有两个数字时,我根据运算符堆栈中的运算符评估它们。它只是像这样对整个字符串进行处理,直到str.hasMoreTokens()
为真,并且 while 循环中断。所以,类似的东西8-5+7*3+1/2-4
可以完美地工作,但我找不到让括号与任何表达式一起工作的方法
我曾经尝试过String newStr = str.replaceFirst("[^(]*(", "");
尝试切断所有内容,包括第一个(
然后递归评估剩下的内容等等,但我认为这比它必须的要复杂得多,无论如何我都无法让它工作。我一直在思考几个小时,但我想不出一个更简单的方法。
谢谢,此时我完全迷失了,所以任何指导/建议都会很棒。