我有一个包含运算符和操作数的方程式。我想拆分它并将运算符和操作数提取到一个字符串数组中,如下所示:
4+3 -2 + 1* 5 -2
4,+,-,2,+,1,*,5,-,2
有没有人为此建议的正则表达式模式?
我有一个包含运算符和操作数的方程式。我想拆分它并将运算符和操作数提取到一个字符串数组中,如下所示:
4+3 -2 + 1* 5 -2
4,+,-,2,+,1,*,5,-,2
有没有人为此建议的正则表达式模式?
这是一种使用正则表达式的方法,没有使用太多,因此可能会得到改进。
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]
您正在尝试做的事情称为标记化。你不应该为此需要正则表达式。您应该能够只使用StringTokenizer
. 其他 SO 帖子上的答案应该适合您的需求:Java 中的 String Tokenizer。
更新
尽管最初的建议应该适合您的需求,但看起来StringTokenizer
该类已被弃用。
从javadocs:
StringTokenizer 是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人改用 String 的 split 方法或 java.util.regex 包。
无论如何,如果您想使用它,它是一个选项。