/**
* 基本计算
* @param x
* @param y
* @param operator
* @return
*/
public static double account(double x, double y, String operator)
{
if(operator.equals(Operator.ADD))
{
return x + y;
}
else if(operator.equals(Operator.MINUS))
{
return x - y;
}
else if(operator.equals(Operator.MULTIPLY))
{
return x * y;
}
else if(operator.equals(Operator.DIVIDE))
{
return x / y;
}
return 0;
}
public static void main(String[] args)
{
String formula = "(1 + 3 * 2) / {[2 * ( 1 + 3)] - 3} - (3 * 2)";
//小中大括号正则匹配
String[] gh = {"\\(.*?\\)", "\\[.*?\\]", "\\{.*?\\}"};
//先计算小括号,再计算中括号,大括号
for(int i = 0; i < gh.length; i++)
{
Pattern pattern = Pattern.compile(gh[i]);
Matcher matcher = pattern.matcher(formula);
while(matcher.find())
{
//获得括号公式
String f = matcher.group();
//计算括号内公式
double value = accountFormula(f.replace(" ", ""), true);
//将计算的值放入原公式
formula = formula.replace(f, value + "");
}
System.out.println(formula);
}
//计算最后剩余公式
double value = accountFormula(formula, false);
System.out.println("结果:" + value);
}
/**
* 计算不包含括号的公式
* @param formula 公式
* @param isClearGh 是否去括号
* @return
*/
public static double accountFormula(String formula, boolean isClearGh)
{
if(isClearGh)
{
//去括号
formula = formula.substring(1, formula.length() - 1);
}
//计算乘除
formula = accountMultiplyAndDivide(formula);
//计算加减
double ret = accountMinusAndAdd(formula);
return ret;
}
06-05