日期:2014-05-20  浏览次数:20714 次

分解四则算式(例如:4+5-6)
请贴正则表达式,或可运行的代码。

------解决方案--------------------
手写犯错误了。
Java code

public class SleepTest {
    public static void main(String[] args) throws InterruptedException {
        String str="34+5-6";
        String numbers[] =str.split("[\\+-/\\*]");
        String op = str.replaceAll("\\d+","");
        char opp[] =op.toCharArray();
        for(int i=0;i<numbers.length-1;i++){
            switch(opp[i]){
                case '+':
                    numbers[i+1] = String.valueOf(Integer.parseInt(numbers[i]) + Integer.parseInt(numbers[i+1]));
                    break;
                case '-':
                    numbers[i+1] = String.valueOf(Integer.parseInt(numbers[i])-Integer.parseInt(numbers[i+1]));
                    break;
            }
        }
        System.out.print("the answer is:"+numbers[numbers.length-1]);
    }
}

------解决方案--------------------
4+5-6 这种表达式称为中缀表达式(运算符位于两个操作数的当中,故称为中缀表达式),
这种表达式适合人进行计算不适合计算机计算,因为其中有运算符的优先级别和改变优先级别的括
号。一般先将其转为后缀表达式(即运算符在操作数的后面)。

中缀表达式:4+5-6 转为后缀表达式为:4 5 + 6 -

得到这个后缀表达式后,使用空格将其拆成 String[]

1:初始化空栈;
2:从索引 0 开始遍历 String[]
3:如果为操作数,则将其压入栈中;
4:如果为运算符,将栈中的数弹出两次,后弹出的数与先弹出的数进行运算,将结果再压回栈中;
5:遍历完成;
6:这时栈中应该只有一个元素,将其弹出,这个元素就是计算结果。

原来写的代码,参考一下。仅支持括号、加、减、乘、除、冪、小数点、正负号,暂时还不能对表达式的正确性做出检查。

Java code
public class Test {

    public static void main(String[] args) {
        String expr = "+5+-5";
        Calculator cal = new Calculator();
        double d = cal.eval(expr);
        System.out.println(d);
    }
}