You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含运算符的字符串转换为整数/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:15:35