string aa = "(1+2)/3+(3+4)*5";
        DataTable dt = new DataTable();
        string b = dt.Compute(aa, "").ToString();
        Response.Write(b);

 

扩展:C#中DataTable中的Compute方法使用收集

 

java算法1:尚未验证 

 

import java.util.HashMap;
import java.util.Map;

public abstract class Operator {
    
    /**
     * 运算符
     */
    private char operator;
    
    /**
     * 运算符的优先级别,数字越大,优先级别越高
     */
    private int priority;
    
    private static Map<Character, Operator> operators = new HashMap<Character, Operator>();
    
    private Operator(char operator, int priority) {
        setOperator(operator);
        setPriority(priority);
        register(this);
    }
    
    private void register(Operator operator) {
        operators.put(operator.getOperator(), operator);
    }
    
    /**
     * 加法运算
     */
    public final static Operator ADITION = new Operator('+', 100) {
            public double eval(double left, double right) {
                return left + right;
            }            
        };
    
    /**
     * 减法运算
     */
    public final static Operator SUBTRATION = new Operator('-', 100) {
            public double eval(double left, double right) {
                return left - right;
            }            
        };
    
    /**
     * 乘法运算
     */ 
    public final static Operator MULTIPLICATION = new Operator('*', 200) {
            public double eval(double left, double right) {
                return left * right;
            }            
        };
    
    /**
     * 除法运算
     */
    public final static Operator DIVITION = new Operator('/', 200) {
            public double eval(double left, double right) {
                return left / right;
            }            
        };
    
    /**
     * 冪运算
     */
    public final static Operator EXPONENT = new Operator('^', 300) {
            public double eval(double left, double right) {
                return Math.pow(left, right);
            }            
        };
        
    /**
     * 取模运算
     */
    public final static Operator MOD = new Operator('%', 200) {
            public double eval(double left, double right) {
                return left % right;
            }            
        };
    
    public char getOperator() {
        return operator;
    }
    private void setOperator(char operator) {
        this.operator = operator;
    }
    public int getPriority() {
        return priority;
    }
    private void setPriority(int priority) {
        this.priority = priority;
    }
    
    /**
     * 根据某个运算符获得该运算符的优先级别
     * @param c
     * @return      运算符的优先级别
     */
    public static int getPrority(char c) {
        Operator op = operators.get(c);
        if(op != null) {
            return op.getPriority();
        }
        return 0;
    }
    
    /**
     * 工具方法,判断某个字符是否是运算符 
     * @param c
     * @return      是运算符返回 true,否则返回 false
     */    
    public static boolean isOperator(char c) {
        return getInstance(c) != null;
    }
    public static boolean isOperator(String str) {
        if(str.length() > 1) {
            return false;
        }
        return isOperator(str.charAt(0));
    }

    /**
     * 根据运算符获得 Operator 实例
     * @param c
     * @return      从注册中的 Operator 返回实例,尚未注册返回 null
     */
    public static Operator getInstance(char c) {       
        return operators.get(c);
    }    
    public static Operator getInstance(String str) {
        if(str.length() > 1) {
            return null;
        }
        return getInstance(str.charAt(0));
    }

    /**
     * 根据操作数进行计算
     * @param left    左操作数
     * @param right   右操作数
     * @return        计算结果
     */
    public abstract double eval(double left, double right); 
}
View Code

相关文章: