直接上核心代码,有问题就根据注释走代码!!!
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @ 复杂数学计算执行工具 (高精度)
* @ tang
*/
@Slf4j
class CalculateUtil {
private static String OPATERCODE = "+-*/()^";
/**
* 比较当前运算符和栈顶运算符的优先级
*
* @param stackPeek
* 栈顶元素
* @param current
* 当前元素
* @return
*/
private static boolean getPriority(String stackPeek, String current) {
if (stackPeek.matches("[\\*\\/]") && current.matches("[\\+\\-\\*\\/]")) {
return true;
} else if (stackPeek.matches("[\\+\\-]") && current.matches("\\+\\-")) {
return true;
}
return false;
}
/**
* 获得后缀表达式
*
* @param infix
* 传入的中缀表达式的集合
* @return
*/
private static ArrayList<String> getSuffix(ArrayList<String> infix) {
ArrayList<String> suffix = new ArrayList<String>();// 用于存储最后的后缀式
Stack<String> operator = new Stack<String>();//