数学表达式中的数字分开

时间:2015-02-27 11:43:51

标签: java regex

我将数学表达式存储为String:

String math = "12+3=15";

我想将字符串分成以下内容:

  • int num1(第一个数字,12)
  • int num2(第二个数字,3)
  • 字符串运算符(+)
  • int answer(答案,15)

(num1和num2可以是0-20之间的数字,运算符可以是+, - ,*,/)

实现这一目标的最简单方法是什么?我在考虑正则表达式,但我不知道该怎么做。

2 个答案:

答案 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.
}