public static void main(String[] args) { ChangeSign cs = new ChangeSign(); //String str = "(a+b*(ss+c*(d-e)/f))/fd+cd*(bb+ww)"; String str = "sdf*sd-(sd+f)/((s*(d+f)+s/(f-d))/s-j)"; str = cs.changeSign2Method(str); str = cs.finallyChange(str); System.out.println(str); } //递归 public String changeSign2Method(String str){ while( str.indexOf("(") != -1 ){ if( str.substring(str.indexOf("(")+1, str.indexOf(")")).indexOf("(") == -1 ){ if( str.indexOf(")") == str.length()-1 ){ if( str.indexOf("(") > 0 && "//+//-//*///".indexOf(str.charAt(str.indexOf("(")-1)) == -1 ){ str = str.substring(0, str.indexOf("("))+"#"+this.baseChange(str.substring(str.indexOf("(")+1, str.indexOf(")")))+"$"; }else{ str = str.substring(0, str.indexOf("("))+this.baseChange(str.substring(str.indexOf("(")+1, str.indexOf(")"))); } }else{ if( str.indexOf("(") > 0 && "//+//-//*///".indexOf(str.charAt(str.indexOf("(")-1)) == -1 ){ str = str.substring(0, str.indexOf("("))+"#"+this.baseChange(str.substring(str.indexOf("(")+1, str.indexOf(")")))+"$"+str.substring(str.indexOf(")")+1); }else{ str = str.substring(0, str.indexOf("("))+this.baseChange(str.substring(str.indexOf("(")+1, str.indexOf(")")))+str.substring(str.indexOf(")")+1); } } }else{ String strtemp = str.substring(0, str.indexOf(")")); str = str.substring(0, strtemp.lastIndexOf("("))+this.baseChange(str.substring(strtemp.lastIndexOf("(")+1, str.indexOf(")")))+str.substring(str.indexOf(")")+1); } //System.out.println(str); } return this.baseChange(str); } //转换没有括号的式子 private String baseChange(String str){ //先确认")"的位置 Map map = new LinkedHashMap(); for( int i=0; i<str.length(); i++ ){ if( str.charAt(i)=='+' || str.charAt(i)=='-' ){ map.put(Integer.valueOf(i), "+-"); }else if( str.charAt(i)=='*' || str.charAt(i)=='/' ){ map.put(Integer.valueOf(i), "*/"); } } Integer integ = new Integer(-1); List list = new ArrayList(); Integer inttemp; Set key = map.keySet(); Map map2 = new LinkedHashMap(); for( Iterator i = key.iterator(); i.hasNext(); ){ inttemp = (Integer) i.next(); if( integ.intValue() != -1 ){ if( map.get(inttemp)=="+-" && map.get(inttemp)!=map.get(integ) ){ if( list.get(0) != integ ){ map2.put(inttemp, "$$"); }else{ map2.put(inttemp, "$"); } }else if( map.get(inttemp).equals(map.get(integ)) ) { map2.put(inttemp, "$"); }else{ map2.put(inttemp, ""); } }else{ map2.put(inttemp, ""); } list.add(inttemp); integ = inttemp; } //加上最后面的")" if( map.containsValue("+-") && map.get(list.get(list.size()-1)) == "*/" ){ str = str + "$$"; }else{ str = str + "$"; } //加上中间的")" for( int i=list.size()-1; i>=0; i-- ){ inttemp = (Integer) list.get(i); if( map2.get(inttemp) != "" ){ str = str.substring(0, inttemp.intValue())+map2.get(inttemp)+str.substring(inttemp.intValue()); } } //替换所有运算符号 str = str.replaceAll("//+", ".add#"); str = str.replaceAll("//-", ".subtract#"); str = str.replaceAll("//*", ".multiply#"); str = str.replaceAll("///", ".divide#"); return str; } //终极解码 private String finallyChange(String expression) { expression = expression.replaceAll("//#", "("); expression = expression.replaceAll("//$", ")"); return expression; }