class Main { public static void main(String []args){ parseStr("ab*c*d+a+c/"); } public static void parseStr(String string){ if(null == string || "".equals(string)) return; StringBuilder sb = new StringBuilder(); String arr[] = string.split(""); for(int i = 0;i<arr.length;i++){ switch (arr[i]) { case "+" : if(sb.length() == 0)sb.append(arr[i-2]+"+"+arr[i-1]); else sb.append("+"+arr[i-1]); break; case "-" : if(sb.length() == 0)sb.append(arr[i-1]+"-"+arr[i-2]); else sb.append("-"+arr[i-1]); break; case "*" : if((sb.indexOf("+")>0 || sb.indexOf("-")>0)&& sb.indexOf(")")<0) { sb.append(")"); sb.insert(0,"("); } else if((sb.indexOf("*")>0 || sb.indexOf("/")>0) && sb.lastIndexOf("*") != (sb.length()-2) && sb.lastIndexOf("/") != (sb.length()-2) ){ System.out.println(sb.lastIndexOf("*")+" : "+sb.length()); sb.append(")"); sb.insert(0,"("); } if (sb.length() == 0) sb.append(arr[i - 1] + "*" + arr[i - 2]); else sb.append("*" + arr[i - 1]); break; case "/" : if((sb.indexOf("+")>0 || sb.indexOf("-")>0)&& sb.indexOf(")")<0) { sb.append(")"); sb.insert(0,"("); } else if((sb.indexOf("*")>0 || sb.indexOf("/")>0) && sb.lastIndexOf("*") != (sb.length()-2) && sb.lastIndexOf("/") != (sb.length()-2) ){ System.out.println(sb.lastIndexOf("*")+" : "+sb.length()); sb.append(")"); sb.insert(0,"("); } if(sb.length() == 0)sb.append(arr[i-1]+"/"+arr[i-2]); else sb.append("/"+arr[i-1]); break; default: break; } } System.out.println(sb.toString()); } }