java简单的四则运算,java 简单的四则运算

/**

* 以下两个方法为计算四则运算的方法,用正则

*

* @author 安泳强

* @date Oct 31, 2011 3:39:51 PM

* @param expression

* @return

*/

private String compute(String expression) {

expression = "(" + expression + ")";

String regex = "(.*?)(\\([^()]+\\))(.*)";

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher(expression);

while (matcher.find()) {

expression = matcher.group(1) + compute1(matcher.group(2))

+ matcher.group(3);

matcher = pattern.matcher(expression);

// System.out.println(expression);

}

return expression;

}

private String compute1(String expression) {

/*

* 计算没有包含括号的情况下的结果

*/

expression = expression.replaceAll("[( )]", "");

String regex = "^(.*?)(\\d+(?:\\.\\d+)?)([/*])(-?\\d+(?:\\.\\d+)?)(.*)";   Pattern pattern = Pattern.compile(regex);   Matcher matcher = pattern.matcher(expression);   double value1 = 0.00;   double value2 = 0.00;   String temp = null;   DecimalFormat df = new DecimalFormat("####################.###");   while (matcher.find()) {    value1 = Double.parseDouble(matcher.group(2));    value2 = Double.parseDouble(matcher.group(4));    if (matcher.group(3).equals("*")) {     temp = df.format(value1 * value2) + "";    } else {     if(value2==0.00){      temp = "";     }else{      temp = df.format(value1 / value2) + "";     }    }    expression = matcher.group(1) + temp + matcher.group(5);    expression = expression.replaceAll("--", "+");    matcher = pattern.matcher(expression);   }   regex = "^(.*?)((?:(?=[-+*/])-)?\\d+(?:\\.\\d+)?)([-+])(-?\\d+(?:\\.\\d+)?)(.*)";   pattern = Pattern.compile(regex);   matcher = pattern.matcher(expression);   while (matcher.find()) {    value1 = Double.parseDouble(matcher.group(2));    value2 = Double.parseDouble(matcher.group(4));    if (matcher.group(3).equals("+")) {     temp = df.format(value1 + value2) + "";    } else {     temp = df.format(value1 - value2) + "";    }    expression = matcher.group(1) + temp + matcher.group(5);    matcher = pattern.matcher(expression);   }   expression = expression.replaceAll("\\+", "");   return expression;  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值