Java实现字符串计算式的计算

本文章将完成使用java实现字符串计算式的计算的介绍

问题描述

给定一个计算式字符串,输出计算式的结果。

其中:

  • 计算式中仅包括"+“、”-“、”*" 三种运算
  • 求解不能使用ScriptEngine等方法

Java实现

package com.lib.blog.test;

public class TestCalc {

    public static void main(String[] args)  {
        String str = "59-46*12-9*10*59-46*12-9*10";
        //处理字符串,方便分割
        str = str.replaceAll("\\+", "#0#")
                .replaceAll("-", "#1#")
                .replaceAll("\\*", "#2#");
        String[] split = str.split("#");
        int[] nums = new int[split.length / 2 + 1];
        int[] cals = new int[split.length];
        for (int i = 0; i < split.length; i++) {
            if (i % 2 == 0) {
                nums[i / 2] = Integer.parseInt(split[i]);
            } else {
                cals[i / 2] = Integer.parseInt(split[i]);
            }
        }
        //输出结果
        System.out.println(solve(nums, cals));
    }

    public static int solve(int[] nums, int[] cals) {
        for (int i = cals.length - 1; i > -1; i--) {
            if (cals[i] == 2) {
                nums[i] = nums[i] * nums[i + 1];
                nums[i + 1] = 1;
            }
        }
        int res = nums[0];
        for (int i = 1; i < nums.length; i++) {
            res = calc(cals[i - 1], res, nums[i]);
        }
        return res;
    }

    public static int calc(int index, int pre, int curr) {
        switch (index) {
            case 0:
                return pre + curr;
            case 1:
                return pre - curr;
            case 2:
                return pre * curr;
        }
        return pre + curr;
    }

}

java

使用ScriptEngine

package com.lib.blog.test;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class TestCalc {

    public static void main(String[] args) throws Exception {
        String str = "59-46*12-9*10*59-46*12-9*10";

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");

        //输出结果
        System.out.println(engine.eval(str));
    }

}

java
打赏
  • 微信
  • 支付宝
评论
来发评论吧~
···

歌手: