我将数学表达式存储为String:
String math = "12+3=15";
我想将字符串分成以下内容:
(num1和num2可以是0-20之间的数字,运算符可以是+, - ,*,/)
实现这一目标的最简单方法是什么?我在考虑正则表达式,但我不知道该怎么做。
答案 0 :(得分:1)
现在,不要对我皱眉。你要求最简单的解决方案:P
public static void main(String[] args) {
String math = "12+3=15";
Pattern p = Pattern.compile("(\\d+)(.)(\\d+)=(\\d+)");
Matcher m = p.matcher(math);
while (m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
System.out.println(m.group(4));
}
}
O / P:
12
+
3
15
EDIT : (\\d+)(.)(\\d+)=(\\d+) -->
\\d+ matches one or more digits.
. matches anything
() --> captures whatever is inside it
(\\d+)(.)(\\d+)=(\\d+) --> captures one or more digits followed by anything (+-* etc) then again one or more digits and ignores the "=" and then captures digits again.
捕获的组从1到n命名。组0表示整个字符串。
答案 1 :(得分:0)
\\b(\\d+)\\b|([+*\/-])
你可以简单地执行此操作并抓住捕获。参见演示。
https://regex101.com/r/wU7sQ0/30
或者只是按\\b
拆分。请参阅演示。
https://regex101.com/r/wU7sQ0/31
var re = /\b(\d+)\b|([+=\\-])/gm;
var str = '12+3=15';
var m;
while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}