0

我正在尝试将字符串从左到右评估为整数,其数字介于 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("[^(]*(", "");尝试切断所有内容,包括第一个(然后递归评估剩下的内容等等,但我认为这比它必须的要复杂得多,无论如何我都无法让它工作。我一直在思考几个小时,但我想不出一个更简单的方法。

谢谢,此时我完全迷失了,所以任何指导/建议都会很棒。

4

2 回答 2

2

如果你想解析中缀符号的数学表达式,你需要实现调车场算法。看不到您的代码,很难说出缺少什么。

于 2013-02-27T05:36:09.167 回答
0

如果其他答案对您的项目来说太复杂了,我建议您尝试在代码中集成 Groovy 脚本引擎。它可以轻松完成所有这些以及更多工作。

如果您需要它像 java 代码一样快地工作,而不是自己解析表达式,它还允许您即时编译为 java 类。

http://groovy.codehaus.org/

于 2013-02-27T06:00:29.037 回答