Java 使用正则表达式从操作数拆分和提取运算符

Java 使用正则表达式从操作数拆分和提取运算符,java,regex,split,extraction-operator,Java,Regex,Split,Extraction Operator,我有一个包含运算符和操作数的方程。 我想将其拆分并提取一个字符串数组中的运算符和操作数,如下所示: 4+3 -2 + 1* 5 -2 4,+,-,2,+,1,*,5,-,2 有人对此有建议的正则表达式模式吗?您正在尝试的是调用。你不应该为此需要正则表达式。您应该能够只使用StringTokenizer。另一篇SO帖子上的答案应该适合您的需要: 更新 虽然最初的建议应该适合您的需要,但看起来StringTokenizer类已接近弃用 从javadocs: StringTokenizer是一个遗

我有一个包含运算符和操作数的方程。 我想将其拆分并提取一个字符串数组中的运算符和操作数,如下所示:

4+3 -2 + 1* 5 -2

4,+,-,2,+,1,*,5,-,2

有人对此有建议的正则表达式模式吗?

您正在尝试的是调用。你不应该为此需要正则表达式。您应该能够只使用
StringTokenizer
。另一篇SO帖子上的答案应该适合您的需要:

更新

虽然最初的建议应该适合您的需要,但看起来
StringTokenizer
类已接近弃用

从javadocs:

StringTokenizer是一个遗留类,尽管新代码中不鼓励使用它,但出于兼容性原因保留它。建议任何寻求此功能的人改用String的split方法或java.util.regex包


无论如何,如果您想使用它,它是一个选项。

这里有一个使用regex的方法,没有使用太多,所以可能可以改进

Pattern pattern = Pattern.compile("[0-9]+|(\\+|-|\\*)");
Matcher matcher = pattern.matcher("4+3 -2 + 1* 5 -2");
List<String> parts = new ArrayList<>();
while (matcher.find()) {
    parts.add(matcher.group());
}
String[] array = parts.toArray(new String[parts.size()]);
System.out.println(Arrays.toString(array));
[4, +, 3, -, 2, +, 1, *, 5, -, 2]