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