1

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

4+3 -2 + 1* 5 -2

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

有没有人为此建议的正则表达式模式?

4

2 回答 2

1

这是一种使用正则表达式的方法,没有使用太多,因此可能会得到改进。

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]
于 2015-03-25T22:07:44.590 回答
0

您正在尝试做的事情称为标记化。你不应该为此需要正则表达式。您应该能够只使用StringTokenizer. 其他 SO 帖子上的答案应该适合您的需求:Java 中的 String Tokenizer

更新

尽管最初的建议应该适合您的需求,但看起来StringTokenizer该类已被弃用。

从javadocs:

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

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

于 2015-03-25T22:06:17.367 回答