如何将含运算符的字符串转换为整数/Double并计算结果?
字符串表达式计算为整数结果的解决方案
方法一:利用脚本引擎快速实现(Java)
适合支持复杂表达式的场景,直接调用内置脚本引擎计算:
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class ExpressionEvaluator { public static int evaluate(String expression) throws ScriptException { ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); Double result = (Double) engine.eval(expression); return result.intValue(); // 如需四舍五入可替换为Math.round(result).intValue() } public static void main(String[] args) throws ScriptException { String expr = "3+5*2-8/2"; System.out.println(evaluate(expr)); // 输出9 } }
注意:该方法要注意输入安全性,避免执行恶意脚本。
方法二:手动实现简单四则运算解析(Java)
针对无括号的基础加减乘除场景,按优先级分步计算:
import java.util.ArrayList; import java.util.List; public class SimpleCalculator { public static int calculate(String expression) { List<Integer> numbers = new ArrayList<>(); List<Character> ops = new ArrayList<>(); StringBuilder numStr = new StringBuilder(); // 拆分数字与运算符 for (char c : expression.toCharArray()) { if (Character.isDigit(c)) { numStr.append(c); } else { numbers.add(Integer.parseInt(numStr.toString())); numStr.setLength(0); ops.add(c); } } numbers.add(Integer.parseInt(numStr.toString())); // 先处理乘除 for (int i = 0; i < ops.size(); ) { char op = ops.get(i); if (op == '*' || op == '/') { int a = numbers.get(i); int b = numbers.get(i + 1); int res = op == '*' ? a * b : a / b; // 整数除法会截断小数 numbers.set(i, res); numbers.remove(i + 1); ops.remove(i); } else { i++; } } // 再处理加减 int result = numbers.get(0); for (int i = 0; i < ops.size(); i++) { char op = ops.get(i); result = op == '+' ? result + numbers.get(i+1) : result - numbers.get(i+1); } return result; } public static void main(String[] args) { System.out.println(calculate("3+5*2-8/2")); // 输出9 } }
注意:该实现仅支持无括号的四则运算,若需处理括号或更复杂表达式,可基于逆波兰表达式(后缀表达式)扩展实现。
内容的提问来源于stack exchange,提问作者mskCoder
相关产品推荐
相关产品推荐

