计算字符串四则运算表达式


  4 
  5 import java.util.regex.Matcher;
  6 import java.util.regex.Pattern;
  7 
  8 
  9 public class ComputeExpression {
 10     /**  
 11      * 计算字符串四则运算表达式
 12      */  
 13     public static String computeString(String string){   
 14         String regexCheck ="[\\(\\)\\d\\+\\-\\*/\\.]*";//是否是合法的表达式   
 15            
 16         if(!Pattern.matches(regexCheck, string))   
 17             return string;   
 18            
 19         Matcher matcher = null;   
 20         String temp = "";   
 21         int index = -1;   
 22         String regex = "\\([\\d\\.\\+\\-\\*/]+\\)";//提取括号表达式   
 23         string = string.replaceAll("\\s""");//去除空格   
 24         try{   
 25             Pattern pattern = Pattern.compile(regex);   
 26             //循环计算所有括号里的表达式   
 27             while(pattern.matcher(string).find()){   
 28                 matcher = pattern.matcher(string);   
 29                 while(matcher.find()){   
 30                     temp = matcher.group();   
 31                     index = string.indexOf(temp);   
 32                     string = string.substring(0, index)+computeStirngNoBracket(temp)+string.substring(index+temp.length());   
 33                 }   
 34             }   
 35             //最后计算总的表达式结果   
 36             string = computeStirngNoBracket(string);   
 37         }catch (NumberFormatException e) {   
 38             return e.getMessage();   
 39         }   
 40         return string;   
 41     }   
 42        
 43     /**  
 44      * 计算不包含括号的表达式  
 45      */  
 46     private static String computeStirngNoBracket(String string){   
 47         string = string.replaceAll("(^\\()|(\\)$)""");   
 48         String regexMultiAndDivision = "[\\d\\.]+(\\*|\\/)[\\d\\.]+";   
 49         String regexAdditionAndSubtraction = "[\\d\\.]+(\\+|\\-)[\\d\\.]+";   
 50            
 51         String temp = "";   
 52         int index = -1;   
 53            
 54         //解析乘除法   
 55         Pattern pattern = Pattern.compile(regexMultiAndDivision);   
 56         Matcher matcher = null;   
 57         while(pattern.matcher(string).find()){   
 58             matcher = pattern.matcher(string);   
 59             if(matcher.find()){   
 60                 temp = matcher.group();   
 61                 index = string.indexOf(temp);   
 62                 string = string.substring(0, index)+doMultiAndDivision(temp)+string.substring(index+temp.length());   
 63             }   
 64         }   
 65            
 66         //解析加减法   
 67         pattern = Pattern.compile(regexAdditionAndSubtraction);   
 68         while(pattern.matcher(string).find()){   
 69             matcher = pattern.matcher(string);   
 70             if(matcher.find()){
 71                 temp = matcher.group();   
 72                 index = string.indexOf(temp);   
 73                 string = string.substring(0, index)+doAdditionAndSubtraction(temp)+string.substring(index+temp.length());   
 74             }   
 75         }   
 76            
 77         return string;   
 78     }   
 79        
 80     /**  
 81      * 执行乘除法 
 82      */  
 83     private static String doMultiAndDivision(String string){   
 84         String value = "";   
 85         double d1 = 0;   
 86         double d2 = 0;   
 87         String[] temp = null;   
 88         if(string.contains("*")){   
 89             temp = string.split("\\*");   
 90         }else{   
 91             temp = string.split("/");   
 92         }   
 93            
 94         if(temp.length<2)   
 95             return string;   
 96            
 97         d1 = Double.valueOf(temp[0]);   
 98         d2 = Double.valueOf(temp[1]);   
 99         if(string.contains("*")){   
100             value=StringUtil.formatDouble(d1*d2);
101         }else{   
102             value=StringUtil.formatDouble(d1/d2);   
103         }   
104            
105         return value;   
106     }   
107        
108     /**  
109      * 执行加减法   
110      */  
111     private static String doAdditionAndSubtraction(String string){   
112         double d1 = 0;   
113         double d2 = 0;   
114         String[] temp = null;   
115         String value = "";   
116         if(string.contains("+")){   
117             temp = string.split("\\+");   
118         }else{   
119             temp = string.split("\\-");   
120         }   
121            
122         if(temp.length<2)   
123             return string;   
124            
125         d1 = Double.valueOf(temp[0]);   
126         d2 = Double.valueOf(temp[1]);   
127         if(string.contains("+")){   
128             value= StringUtil.formatDouble(d1+d2);
129         }else{   
130             value=StringUtil.formatDouble(d1-d2);   
131         }   
132            
133         return value;   
134     }
135     public static void main(String[] args) {
136         System.out.println(ComputeExpression.computeString("(7)*-/+"));
137     }
138 }
139 
 
原文地址:https://www.cnblogs.com/mabaishui/p/1788055.html