Java Split() 拆分数学方程式

Java Split() to Split Up Math Equation

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

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

这对 1 + 1 很有效,但是执行 2 - -2 会产生 { 2, -, -, 2 },这不是我想要的。我对拆分和正则表达式有点陌生,所以这可能是一个基本问题,我只是未能正确研究,但我们将不胜感激任何帮助!另外,我意识到用空格分隔会非常容易,但我真的很想避免这种情况。非常感谢您的帮助!

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

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

您强制第一个匹配表达式位于一系列数字之前,而不是任何内容之前。结果是:

[2 , - , -2]

这并不完美,但至少在你 trim 多余的 space.

之后你现在有了正确的标记

如你所愿。

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