? ? ? ? str = multiReg(str, values);
? ? ? ? str = divReg(str, values);
? ? ? ? java.util.List
? ? ? ? java.util.List
? ? ? ? BigDecimal v = getValue(valuesign, signs, values);
? ? ? ? return v;
? ? }
?
? ? /**
? ? * 获取结果
? ? *
? ? * @param valuesign 值替换符号
? ? * @param signs 符号
? ? * @param values 值存储表
? ? * @return
? ? */
? ? private static BigDecimal getValue(java.util.List
? ? ? ? BigDecimal value = values.get(valuesign.get(0));
? ? ? ? for (int i = 0; i < signs.size(); i++) {
? ? ? ? ? ? if (signs.get(i)) {
? ? ? ? ? ? ? ? value = value.add(values.get(valuesign.get(i + 1)));
? ? ? ? ? ? ? ? //value += values.get(valuesign.get(i + 1));
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? value = value.subtract(values.get(valuesign.get(i + 1)));
? ? ? ? ? ? ? ? //value -= values.get(valuesign.get(i + 1));
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return value;
? ? }
?
? ? /**
? ? * 获取替换的符号
? ? *
? ? * @param str 待匹配的字符串
? ? * @return 返回 替换的值符号
? ? */
? ? private static java.util.List
? ? ? ? java.util.List
? ? ? ? Pattern patt = Pattern.compile("([a-zA-Z0-9]*{1})", Pattern.DOTALL);
? ? ? ? Matcher mat = patt.matcher(str);
? ? ? ? while (mat.find()) {
? ? ? ? ? ? if (mat.group(1).trim().equals("")) {
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
? ? ? ? ? ? list.add(mat.group(1));
? ? ? ? }
? ? ? ? return list;
? ? }
?
? ? /**
? ? * 获取加减符号
? ? *
? ? * @param str 待匹配的字符串
? ? * @return 返回 符号顺序,加号为true,减号为false
? ? */
? ? private static java.util.List
? ? ? ? java.util.List
? ? ? ? Pattern patt = Pattern.compile("([a-zA-Z0-9]*{1}([+|-])[a-zA-Z0-9]*{1})", Pattern.DOTALL);
? ? ? ? Matcher mat = patt.matcher(str);
? ? ? ? while (mat.find()) {
? ? ? ? ? ? if (mat.group(2).trim().equals("+")) {
? ? ? ? ? ? ? ? list.add(true);
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? list.add(false);
? ? ? ? ? ? }
? ? ? ? return list;
? ? }
?
? ? /**
? ? * 乘法的正则
? ? *
? ? * @param str 运算表达式字符串
? ? * @param values 值存储表
? ? * @return 返回重构后的字符串
? ? */
? ? private static String multiReg(String str, java.util.Map
? ? ? ? Pattern patt = Pattern.compile("([a-zA-Z0-9]*{1}\\*[a-zA-Z0-9]*{1})", Pattern.DOTALL);
? ? ? ? Matcher mat = patt.matcher(str);
? ? ? ? while (mat.find()) {
? ? ? ? ? ? str = excMultiplication(str, mat.group(1), values);
? ? ? ? }
? ? ? ? return str;
? ? }
?
? ? /**
? ? * 除法的正则
? ? *
? ? * @param str 运算表达式字符串
? ? * @param values 值存储表
? ? * @return 返回重构后的字符串
? ? */
? ? private static String divReg(String str, java.util.Map
? ? ? ? Pattern patt = Pattern.compile("([a-zA-Z0-9]*{1}\\/[a-zA-Z0-9]*{1})", Pattern.DOTALL);
? ? ? ? Matcher mat = patt.matcher(str);
? ? ? ? while (mat.find()) {
? ? ? ? ? ? str = excDivsion(str, mat.group(1), values);
? ? ? ? }
? ? ? ? return str;
? ? }
?
? ? /**
? ? * 计算乘法
? ? *
? ? * @param str 全部的运算字符串
? ? * @param value 计算乘法的字符串
? ? * @param map 值存储表
? ? * @return 返回重构后的字符串
? ? */
? ? private static String excMultiplication(String str, String value, java.util.Map
? ? ? ? String vs[] = value.split("\\*");
? ? ? ? BigDecimal v1 = map.get(vs[0]);
? ? ? ? BigDecimal v2 = map.get(vs[1]);
? ? ? ? BigDecimal x = v1.multiply(v2);
? ? ? ? map.remove(vs[0]);
? ? ? ? map.remove(vs[1]);
? ? ? ? String uuid = getUUID();
? ? ? ? map.put(uuid, x);
? ? ? ? str = str.replace(value, uuid);
? ? ? ? return str;
? ? }
?
? ? /**
? ? * 计算出发
? ? *
? ? * @param str 全部的运算字符串
? ? * @param value 计算乘法的字符串
? ? * @param map 值存储表
? ? * @return 返回重构后的字符串
? ? */
? ? private static String excDivsion(String str, String value, java.util.Map