62,623
社区成员
发帖
与我相关
我的任务
分享 String s = "12+8*(2*3*4+5)+456-8/(5/2)";
String ret = replace(s);
System.out.println(ret);
public static String replace(String str){
String ret = str;
Pattern p = Pattern.compile("\\((.+?)\\)");
Matcher m = p.matcher(str);
while(m.find()){
String param = calculate(m.group(1));
ret = ret.replaceFirst("\\("+m.group(1).replaceAll("[*+]", "\\\\$0")+"\\)", param);
}
if(ret.matches("\\((.+?)\\)")) return replace(ret);
return calculate(ret);
}
public static String calculate(String str){
// System.out.println(str);
String ret = "";
Pattern p = Pattern.compile("(\\d+(\\.\\d+)?)([/*])(\\d+(\\.\\d+)?)");
Matcher m = p.matcher(str);
if(m.find()){
double pre = new Double(m.group(1)).doubleValue();
String code = m.group(3);
double pos = new Double(m.group(4)).doubleValue();
if("*".equals(code)) ret = pre * pos + "";
if("/".equals(code)) ret = pre / pos + "";
return calculate(str.replaceFirst(m.group(0).replaceFirst("\\*", "\\\\*"), ret));
}else {
p = Pattern.compile("(\\d+(\\.\\d+)?)([+-])(\\d+(\\.\\d+)?)");
m = p.matcher(str);
if(m.find()){
double pre = new Double(m.group(1)).doubleValue();
String code = m.group(3);
double pos = new Double(m.group(4)).doubleValue();
if("+".equals(code)) ret = pre + pos + "";
if("-".equals(code)) ret = pre - pos + "";
return calculate(str.replaceFirst(m.group(0).replaceFirst("\\+", "\\\\+"), ret));
}
}
return str;
}