我正在尝试编写一种方法,将输入的数学表达式分解为所有单独的运算符和数字。例如,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},这不是我想要的。我对分裂和正则表达有点新意,所以这可能是一个基本问题,我只是没有正确研究,但任何帮助都会非常感激!而且,我意识到用空格分开会非常容易,但我真的很想避免这种情况。非常感谢您的帮助!
答案 0 :(得分:2)
这可以随意使用。
String[] t = "2-2+-2".split("(?=[-+*/()])|(?<=[^-+*/][-+*/])|(?<=[()])");
// ==> {"2", "-", "2", "+", "-2"}
答案 1 :(得分:0)
将[0-9]+
添加到正则表达式模式的开头,如下所示:
String[] t = tokens.split("[0-9]+(?<=[-+*/()])|(?=[-+*/()])");
你强制第一个匹配的表达式在一系列数字之前,而不是在任何前面的任何数字之前。结果是:
[2 , - , -2]
这不是完美的,但至少你现在有了正确的代币,在修剪多余的空间之后。