
解析并计算字符串形式的加减乘除算式我亲测可行的有以下两种方法1. Java自带的eval方法代码如下import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /** * 使用java eval 计算字符串表达式 * param str 字符串表达式 * return double 类型的结果 */ public static Double eval(String str) { ScriptEngineManager manager new ScriptEngineManager(); ScriptEngine se manager.getEngineByName(js); Double result null; try { result Double.valueOf(se.eval(str).toString()); if (result null) { result new Double(0); } } catch (ScriptException e) { e.printStackTrace(); } return result; }2. 递归手动解析核心代码/** * 判断表达式是不是只有一个数字 * * param str 原值 * return 数字非法性校验结果失败返回false; */ private static boolean isNumber(String str) { for (int i 0; i str.length(); i) { if (!Character.isDigit(str.charAt(i)) str.charAt(i) ! . str.charAt(i) ! ) { return false; } } return true; } /** * 解析算式并计算算式结果 * * param str 算式的字符串 * return double类型的算式结果 */ public static Double getResult(String str) { // 递归头 if (str.isEmpty() || isNumber(str)) { return str.isEmpty() ? 0 : Double.parseDouble(str); } //递归体 if (str.contains())) { // 最后一个左括号 int lIndex str.lastIndexOf((); // 对于的右括号 int rIndex str.indexOf(), lIndex); return getResult(str.substring(0, lIndex) getResult(str.substring(lIndex 1, rIndex)) str.substring(rIndex 1)); } if (str.contains()) { int index str.lastIndexOf(); return getResult(str.substring(0, index)) getResult(str.substring(index 1)); } if (str.contains(-)) { int index str.lastIndexOf(-); return getResult(str.substring(0, index)) - getResult(str.substring(index 1)); } if (str.contains(*)) { int index str.lastIndexOf(*); return getResult(str.substring(0, index)) * getResult(str.substring(index 1)); } if (str.contains(/)) { int index str.lastIndexOf(/); return getResult(str.substring(0, index)) / getResult(str.substring(index 1)); } // 出错 return null; }参考如下连接https://blog.csdn.net/qq_37969433/article/details/81174046