package com.zhiwan.calc;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* CalculateUtils 字符串表达式工具类
* 使用了逆波兰表达式的计算原理进行运算
*/
public class CalculateUtils {
private final static String OP1 = "+";
private final static String OP2 = "-";
private final static String OP3 = "*";
private final static String OP4 = "/";
private final static String OP5 = "(";
private final static String OP6 = ")";
private final static String OP7 = "^";
private final static String OP8 = "%";
/**
* 计算精度上下文 需要用到下面两个值
*/
private static MathContext mc;
/**
* 取舍模式 四舍五入 (除法用得到)
*/
private static RoundingMode roundingMode = RoundingMode.HALF_UP;
/**
*小数点保持精度位数值 如:0.1 下面改制就需要改为1
*/
private static int precision = 10;
/**
* 字符串表表达式求值 函数
* @param formula 字符串中缀表达式
* @param ATK ATK值 无该参数时 值默认传0
* @param hp hp 值 无该参数时 值默认传0
* @param def def值 无该参数时 值默认传0
* @param speed speed值 无该参数时 值默认传0
* @return 返回最终的结果
*/
public static double calcformulaFunction(String formula , int ATK,int hp , int def ,int speed ) {
double calcResult = 0;
String atkStr = "ATK";
String hpStr = "hp";//有时候会是HP
String defStr = "def";
String speedStr = "speed";
if (formula.toLowerCase().contains(atkStr.toLowerCase())) {
formula = formula.toLowerCase().replace(atkStr.toLowerCase(), "" + ATK);
}
if (formula.toLowerCase().contains(hpStr.toLowerCase())) {
formula = formula.toLowerCase().replace(hpStr, "" + hp);
}
if (formula.toLowerCase().contains(defStr.toLowerCase())) {
formula = formula.toLowerCase()
Java 字符串表达式 使用逆波兰式计算结果
最新推荐文章于 2024-07-15 22:27:18 发布