import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test{ public static void main(String[] args){ String result = compute("-2/6+-3"); System.out.println(result); } public static 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 static 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.0; double value2 = 0.0; String temp = null; while(matcher.find()){ value1 = Double.valueOf(matcher.group(2)); value2 = Double.valueOf(matcher.group(4)); if(matcher.group(3).equals("*")){ temp = (value1 * value2) + ""; }else{ temp = (value1 / value2) + ""; } expression = matcher.group(1) + temp + matcher.group(5); expression = expression.replaceAll("--","+"); matcher = pattern.matcher(expression); } //System.out.println(expression); regex = "^(.*?)((?:(?=[-+*/])-)?//d+(?://.//d+)?)([-+])(-?//d+(?://.//d+)?)(.*)"; pattern = Pattern.compile(regex); matcher = pattern.matcher(expression); while(matcher.find()){ value1 = Double.valueOf(matcher.group(2)); value2 = Double.valueOf(matcher.group(4)); if(matcher.group(3).equals("+")){ temp = (value1 + value2) + ""; }else{ temp = (value1 - value2) + ""; } expression = matcher.group(1) + temp + matcher.group(5); matcher = pattern.matcher(expression); } expression = expression.replaceAll("//+",""); return expression; } }