java验证四则运算公式的合法性(包含括号、字母、⼩数)
java验证四则运算公式的合法性(包含括号、字母、⼩数)
1.场景描述
在实际的业务中,⼀个测点需要根据其他多个已知测点计算得出,在页⾯中输⼊计算公式,需要调⽤后台接⼝验证计算公式的合法性。⽐如验证a乘以2,m乘以2.0,(d002乘以2)加上2,(d*2)+,(e+3)/3,(ef001+3,1/1等合法性。
2.⼯具类⽰例
/**
* 验证表达式⼯具类
*/
public class ExpressionUtils {
/**
* 验证四则运算表达式是否准确
* @param expression
* @return
*/
public static boolean validateExpression(String expression){
//第⼀步:去掉算式中所有的合法项替换为"?"字符,去掉替换后算式中所有的空格
expression = placeAll("((K|Z|C)\\d\\$(\\d)+(\\.(\\d)*){0,1})","?");
expression = placeAll(" ","");
// 如果有两个相邻的项中间没有操作符,则算式不合法
if(expression.matches("^??$")){
return false;
}
if(expression.matches("^(.)*max\\(\\?-\\?,\\d\\)(.)*$")){
expression = placeAll("max\\(\\?-\\?,\\d\\)","?");
}
// 第⼆步:判断⼩括号左右括弧是否等同,括弧位置是否合法,如果括弧全部合法,则去掉所有括弧
int num =0;
char[] expCharArray = CharArray();
for(int i =0; i < expCharArray.length; i++){
char temp = expCharArray[i];
if(temp =='('){
num++;
replaceall()
}else if(temp ==')'){
num--;
}
if(num <0){
return false;
}
}
if(num >0){
return false;
}
//去掉括号,进⾏验证
expression = placeAll("\\(|\\)","");
// 最后⼀步:判断仅剩的+-*/四则运算算式是否合法,字母数字(增加包含⼩数)
if(expression.matches("^(([a-zA-Z0-9\\.]+[-+*/])*[a-zA-Z0-9\\.]+([-+*/][a-zA-Z0-9\\.]+)*)$")){
return true;
}else{
return false;
}
}
}
3.验证
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论