String Java中的分隔符

时间:2017-04-05 06:52:21

标签: java string parsing expression

假设给出了一个数学表达式,其中包含任意数量的分数。

例如:

(x+2) / (1+ 1 / (x-2))

如何输出表达式中的每个除数?对于上面的示例,输出必须是:

1+1/(x-2)
x-2

因为1+1/(x-2)有一个除法,而后者又包含x-2的除法。

我只获得第一个除数,即第一个除数后的整个除数。我如何得到所有除数?

编辑:他要求的是获取表达式中的所有除数。

1 个答案:

答案 0 :(得分:1)

除法是a / b形式的表达式,其中a和b本身可以是数字,变量或表达式。 a是"被分红",b是"除数"。您希望输出表达式中的每个除数。

关键是要意识到表达式实际上是二叉树结构。树的节点是符号,它们组合了两个子表达式。叶子(没有后代的节点)是变量或数字。以下是您的表达示例:

expression tree

最高操作是最后发生的分裂。左边是x + 2,它由两个叶节点(x和2)和+操作组成。右边是子表达式(1 + 1 /(x - 2))。请注意,最后一部分很棘手。如果你只是从左到右看运算符,你可能会把它误解为(1 + 1)/(x - 2)。但它真的是1 +(1 /(x - 2)),因为你需要考虑运算符优先级。

您需要做的是创建一个在内存中构建树的解析器,同时考虑括号和运算符优先级。如果你想要所有除数,你可以遍历树中的每个节点,如果它是一个除法节点,你要求它的右手孩子的表达。必须重新填充括号,或者您可以在解析期间缓存部分字符串,并将这些部分链接到节点。

这不是提供现成代码的答案,但正如评论中所述,Stack Overflow并不适合这样做。如果提出一个非常具体的问题,可能会提供代码,但对于这样一个更大的问题,我们更愿意解释"如何",并将实际的实现留给您。无论如何,这是你的工作,家庭作业或爱好。