Java Split()拆分数学方程式

时间:2015-02-04 03:18:43

标签: java regex parsing split expression

我正在尝试编写一种方法,将输入的数学表达式分解为所有单独的运算符和数字。例如,1 + 1将产生{1,+,1}和2 - -2的数组将产生{2, - , - 2}的数组。在对StackOverflow进行一些研究(使用这个问题:Splitting a simple maths expression with regex)之后,我有点工作了,我写了以下内容:

String[] t = tokens.split("(?<=[-+*/()])|(?=[-+*/()])");

这适用于1 + 1,但是2 - -2产生{2, - , - ,2},这不是我想要的。我对分裂和正则表达有点新意,所以这可能是一个基本问题,我只是没有正确研究,但任何帮助都会非常感激!而且,我意识到用空格分开会非常容易,但我真的很想避免这种情况。非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

这可以随意使用。

String[] t = "2-2+-2".split("(?=[-+*/()])|(?<=[^-+*/][-+*/])|(?<=[()])");
// ==> {"2", "-", "2", "+", "-2"}

答案 1 :(得分:0)

[0-9]+添加到正则表达式模式的开头,如下所示:

String[] t = tokens.split("[0-9]+(?<=[-+*/()])|(?=[-+*/()])");

你强制第一个匹配的表达式在一系列数字之前,而不是在任何前面的任何数字之前。结果是:

[2 , - , -2]

这不是完美的,但至少你现在有了正确的代币,在修剪多余的空间之后。