如何在多级括号表达式之间读取文本

时间:2014-03-25 21:23:45

标签: java string parsing substring

我试图通过文本解析它是否是一个有效的表达式。我遇到了以下问题。

((5 * 4)+ 3)是一个有效的表达式。

我如何解析这个以允许我一次分析一个括号中的内容。 例如,我希望在单独的子字符串中返回以下表达式,以便一个子字符串读取" 5 * 4"另一个单独的子字符串读取"(5 * 4)+ 3"

我知道我可以按如下方式使用子字符串:

String test = "test (542)";

test = test.substring(test.indexOf("(") + 1);
test = test.substring(0, test.indexOf(")"));

但是我怎样才能最好地处理未知字符串的多个级别的括号。

2 个答案:

答案 0 :(得分:1)

Divide and Conquer将是一种很有前景的方法。您可以定义一个递归函数,它只需要显式处理一个简单的基本情况(如5 * 4)。只要有括号,再次使用括号内的文本调用该函数。

答案 1 :(得分:0)

您可以使用Shunting-yard algorithm执行此操作。如果只验证表达式,则不需要实现所有算法。当您拥有所有必需的运算符和操作数时,表达式有效。在YouTube中,您可以看到Shunting Yard Algorithm - Intro and Reverse Polish Notation