假设我编写了一个函数来评估一个简单的数学运算,并且我在一个字符串中有一些用户输入,例如: “1 + [2 + [3+4]]” 我如何解析这些方括号并首先提取最里面的文本 (3+4),对其求值,然后解析外括号 (2 + 7)? 我对 Regex 搜索和替换有初步的了解,但我知道他们不会像这样进行递归。 我想要一些基本的 Java 代码来执行此操作,如果可以避免的话,我不想使用另一个 jar/API。
最佳答案
实现您的目标的最简洁的方法是为此目的编写一个 Lexer 和一个 Parser。写一个 recursive descent parser对于算术表达式,从头开始并不难。
网络上有很多代码示例。 This is an example可以用来激发灵感。
Lexer 用于规范化您的输入并将其抽象为标记流。这样,您的解析器只需要处理标记,而不必额外处理空白问题和其他烦人的事情。
Two examples对于基于堆栈的高级算法,another example这显示了递归下降方法。
关于解析嵌套表达式的java方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251781/