String s = "12+8*(2*3*4+5)+456-8/(5/2)";
设计一个好的算法计算该表达式的值
考虑优先级别
设计一个好的算法计算该表达式的值
考虑优先级别
解决方案 »
- 急问,请帮忙,谢谢各位大侠!请问http_request.readyState一直为1,到不了4,是什么原因呢?该如何解决呢?谢谢!
- 问个对字符串加密的问题。。。。在线等待.......
- 时间格式转换问题
- 编程解析字符串型的表达式对括号如何处理
- 50分问题
- jsp 连接ORACEL数据库并显示表dptmst中的内容,怎么不显示内容?
- 请问一个javac的问题
- 如何用java调用ie核心,开发浏览器,或者直接开发?
- 类的继承有点不明白,请指教
- 各位大侠:推荐几本好书和好的网站吧
- c++调用java,然后访问oracle出现的问题
- 求一字符替换的正则表达式!!!!!!!!!!! 越简单越好!`~~~
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;
}
java中有没有我就不知道了
你可以用java.util.Stack类,然后自己设计,或者找本数据结构书看看上面应该有算法