代码先是在网上找的,但有BUG,我加了几句.现在对带括号的四项运算是没问题的.
public class App1 { /** * @param args */ public static void main(String[] args) { try { System.out.println(cal("24+1*2/1-9+(-20+(+3))")); System.out.println(cal("1-3*(4-(2+5*3)+5)-6/(1+2)")); } catch (Exception e) { e.printStackTrace(); } }
public static String cal(String str) { // 方法内应做除零异常的捕获处理
if (str.indexOf("(") >= 0) { String mid = str.substring(str.lastIndexOf("(") + 1); String tem = mid.substring(0, mid.indexOf(")"));
str = str.replace("(" + tem + ")", cal(tem));
if (str.indexOf("+") > 0 || str.indexOf("-") > 0 || str.indexOf("*") > 0 || str.indexOf("/") > 0 || str.indexOf("(") > 0) { return cal(str); } else return str; } if (str.indexOf("+") >= 0) { String str1 = str.substring(0, str.lastIndexOf("+")); String str2 = str.substring(str.lastIndexOf("+") + 1); if (str1.indexOf("+") > 0 || str1.indexOf("-") > 0 || str1.indexOf("*") > 0 || str1.indexOf("/") > 0) { str1 = cal(str1); } if (str2.indexOf("+") > 0 || str2.indexOf("-") > 0 || str2.indexOf("*") > 0 || str2.indexOf("/") > 0) { str2 = cal(str2); } // i added
if (str1 == null || str1.length() == 0) str1 = "0"; return "" + (Float.parseFloat(str1) + Float.parseFloat(str2)); } if (str.indexOf("-") >= 0) { String str1 = str.substring(0, str.lastIndexOf("-")); String str2 = str.substring(str.lastIndexOf("-") + 1); if (str1.indexOf("+") > 0 || str1.indexOf("-") > 0 || str1.indexOf("*") > 0 || str1.indexOf("/") > 0) { str1 = cal(str1); } if (str2.indexOf("+") > 0 || str2.indexOf("-") > 0 || str2.indexOf("*") > 0 || str2.indexOf("/") > 0) { str2 = cal(str2); } // i added
if (str1 == null || str1.length() == 0) str1 = "0"; return "" + (Float.parseFloat(str1) - Float.parseFloat(str2)); } if (str.indexOf("*") >= 0) { String str1 = str.substring(0, str.lastIndexOf("*")); String str2 = str.substring(str.lastIndexOf("*") + 1); if (str1.indexOf("+") > 0 || str1.indexOf("-") > 0 || str1.indexOf("*") > 0 || str1.indexOf("/") > 0) { str1 = cal(str1); } if (str2.indexOf("+") > 0 || str2.indexOf("-") > 0 || str2.indexOf("*") > 0 || str2.indexOf("/") > 0) { str2 = cal(str2); } // i added
if (str1 == null || str1.length() == 0) str1 = "1"; return "" + (Float.parseFloat(str1) * Float.parseFloat(str2)); } if (str.indexOf("/") >= 0) { String str1 = str.substring(0, str.lastIndexOf("/")); String str2 = str.substring(str.lastIndexOf("/") + 1); if (str1.indexOf("+") > 0 || str1.indexOf("-") > 0 || str1.indexOf("*") > 0 || str1.indexOf("/") > 0) { str1 = cal(str1); } if (str2.indexOf("+") > 0 || str2.indexOf("-") > 0 || str2.indexOf("*") > 0 || str2.indexOf("/") > 0) { str2 = cal(str2); } return "" + (Float.parseFloat(str1) / Float.parseFloat(str2)); } return str; } } |
阅读(1627) | 评论(0) | 转发(0) |