posts - 241,  comments - 116,  trackbacks - 0
          import java.util.ArrayList;
          import java.util.List;

          public class MathString {
              
              public static void main(String[] args){
                  String press = "12*12.22-7*(23.45-(-2))+(12-34)";
                  press = press.replaceAll("[\\[\\{]", "(").replaceAll("[\\]\\}]", ")");
                  System.out.println(parseString(press));
              }
              
              public static String parseString(String press){
                  int lasc = press.lastIndexOf("(");
                  if(lasc==-1){
                      return String.valueOf(addString(press));
                  }
                  
                  String firstKHString = press.substring(0,lasc);
                  String lastFKHString = press.substring(lasc+1);
                  //System.out.println("firstKHString---"+firstKHString);
                  //System.out.println("lastFKHString---"+lastFKHString);

                  int firc = lastFKHString.indexOf(")");
                  lastFKHString = press.substring(firc+lasc+2);
                  //System.out.println("lastFKHString---"+lastFKHString);
                  String currentPress = press.substring(lasc+1,firc+lasc+1);
                  //System.out.println(currentPress);

                  return parseString(firstKHString+addString(currentPress)+lastFKHString);
              
              } 
              public static double addString(String press){
                  //System.out.println(press);
                  press = repAddString(press);
                  press = repString(press);
                  //System.out.println(press);
                  String[] numbers = press.split("[\\+]");
                  double number = 0;
                  
                  List<String> fhs = getFHAdd(press);
                  for(int i=0 ; i<numbers.length; i++ ){
                      String curNum = numbers[i];
                      //System.out.println(curNum);
                      if(curNum.equals("")){
                          curNum="0";
                      }
                      if(fhs.get(i).equals("+")){
                          number = number + mathString(curNum);
                      }else if(fhs.get(i).equals("-")){
                          number = number - mathString(curNum);
                      }
                  }
                  return number;
              }
              
              public static double mathString(String press){
                /*int firstCH = press.indexOf("*");
                  int firstC = press.indexOf("/");
                  if(firstCH == -1 && firstC == -1){
                      return Double.parseDouble(press);
                  }
                  int firstindex = firstC < firstCH ? firstC : firstCH;
                */        
                  press = repAddString(press);
                  String[] numbers = press.split("[\\*\\/]");
                  List<String> fhs = getFH(press);
                  double result = 1;
                  for(int i=0 ; i<numbers.length; i++){
                      if(fhs.get(i).equals("*")){
                          result = result * Double.parseDouble(numbers[i]);
                      }else if(fhs.get(i).equals("/")){
                          if(Double.parseDouble(numbers[i])==0){
                              throw new ArithmeticException("表達(dá)式中被除數(shù)有空值!");
                          }
                          result = result / Double.parseDouble(numbers[i]);
                      }
                  }        
                  return result;
              }
              
              
              
              public static String repAddString(String press){
                  return press.replace("++", "+").replace("--", "+").replace("+-", "-").replace("-+", "-");
              }
              
              public static String repString(String press){
                  StringBuffer sb = new StringBuffer();
                  char ch = 0;
                  for(char c:press.toCharArray()){
                      if(c=='-'&&'/'!=ch&&'*'!=ch){
                          sb.append("+");
                      }
                      ch = c;
                      sb.append(c);
                  }
                  return sb.toString();
              }
              public static List<String> getFH(String press){
                  char[] chars = press.toCharArray();
                  List<String> fhs = new ArrayList<String>();
                  fhs.add("*");
                  for(char c : chars){
                      if(c=='*' || c=='/'){
                          fhs.add(String.valueOf(c));
                      }
                  }
                  return fhs;
              }
              
              public static List<String> getFHAdd(String press){
                  char[] chars = press.toCharArray();
                  List<String> fhs = new ArrayList<String>();
                  fhs.add("+");
                  for(char c : chars){
                      if(c=='+'){
                          fhs.add(String.valueOf(c));
                      }
                  }
                  return fhs;
              }
              
          }
          posted on 2011-07-01 10:09 墻頭草 閱讀(1422) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開(kāi)發(fā)網(wǎng) 貨運(yùn)專家
          主站蜘蛛池模板: 辽源市| 车致| 呼和浩特市| 南澳县| 嘉定区| 商河县| 罗定市| 凤冈县| 句容市| 清远市| 江门市| 湘阴县| 正阳县| 鄱阳县| 宁都县| 高碑店市| 辉南县| 察雅县| 阿拉善右旗| 亚东县| 万荣县| 合江县| 英超| 东源县| 西和县| 荣成市| 兴文县| 措勤县| 布尔津县| 清苑县| 涟水县| 铁岭市| 宁都县| 上饶市| 红安县| 宜阳县| 织金县| 淮南市| 吴桥县| 海南省| 东明县|