如何在运算符的基础上拆分线性String表达式

时间:2014-09-20 16:26:40

标签: java regex

我有一个线性表达式,我必须将其用于某些计算目的。但我无法通过在运营商的基础上分离来正确使用它。即我有一个表达

"c*(a+b)+(a-b)"

我必须从中提取c,(a + b),(ab)。我能够从那里分离c但是我不能分开(a + b)和(ab)。我这样做

                String linearExp="c*(a+b)+(a-b)";
    String leftOperators=null;
    String rightOperators=null;

    for(int i=0;i<linearExp.length();i++){

        leftOperators=linearExp.substring(0,linearExp.lastIndexOf("*"));
        rightOperators=linearExp.substring(linearExp.lastIndexOf("*")+1);
    }
    System.out.println(leftOperators);
    System.out.println(rightOperators);  

这就像c&amp; (a + b)+(a-b)。但我需要(a + b)&amp;(a-b)分开。有人请帮忙

1 个答案:

答案 0 :(得分:0)

这完全基于您给定的表达式,不适用于嵌套括号。

使用正则表达式实现外观以分割运算符的一种方法。

String s = "c*(a+b)+(a-b)";
String[] parts = s.split("(?<=\\))[*+/-]|[*+/-](?=\\()");
System.out.println(Arrays.toString(parts)); //=> [c, (a+b), (a-b)]