验证公式正确性 使用java下的正则表达?

来源:百度知道 编辑:UC知道 时间:2024/06/25 06:30:13
验证公式的正确性
目前我认为在java下 用正则表达式比较好实现,但是正则表达式我不太会
公式的的是第一位为K或Z或C;第二位是数字,例如0;第三位是$,即美元;第四位以后是数字,但是位数不限,可以有小数点。以上规则例如是Z0$1001.98是符合规则的。
可以函数,例如max(Z1$1001-Z1$1001,0),或是If {Z0$1001<=0} then {0} else {Z0$1001}
公式可以是
1、Z0$1001.98
2、Z0$1001.98+K0$1021.98
3、(Z0$1001.98+K0$1021.98)+Z0$1001.98
4、max(Z1$1001-Z1$1001,0)
5、(Z0$1001+K1$1001)+C2$1001-max(Z1$1001-Z1$1001,0)
6、max(Z1$1001-Z1$1001,0)+K0$1021.98+if{Z0$1001<=0} then {0} else {Z0$1001}
公式中所有参与运算的项都必须遵循
1、运算项定义
2、运算符保留字必须使用小写字符,包括:max,min,abs,round,if,then等
如果不是用正则表示式实现也可以,但是要在java下实现。
求高手帮忙,如果写得好还可以再加分!!
. max(a,b) 取大, 如:max(Z0$1001-K1$1001,100.01)
. min(a,b) 取小, 如:min(Z0$1001-K1$1001,100.01)
. abs(a) 取绝对值,求绝对值
. ceil(a) 返回大于或等于给出数字的最小整数
. floor(a) 对给定的数字取整数
. round(a) 按照指定的精度进行舍入
. If then 逻辑判断 ,判断数据大小。如:
if{Z0$1001<=0}then{0}else{Z0$1001}
运算符* / 可以
< > <> 不可以

飞蛋也太活跃了,我重复发了三次,

//搞到需求5了。。。剩下的有空继续搞
public class DateTest {
public static void main(String args[]) throws Exception{
String str1 = "(Z0$1001+K1$1001)+C2$1001-max(Z1$1001-Z1$1001,0)";
System.out.println(validateExpression(str1));
}

public static boolean validateExpression(String expression) {
//去掉算式中所有的合法项替换为"?"字符
expression = expression.replaceAll("((K|Z|C)\\d\\$(\\d)+(\\.(\\d)*){0,1})","?");
//去掉替换后算式中所有的空格
expression = expression.replaceAll(" ","");
//如果有两个相邻的项中间没有操作符,则算式不合法
if(expression.matches("^??$")) {
return false;
}
/**
* 增加你需要的函数运算符,如果函数内部参数结构不同则需要改写正则表达式
*/
//如果包含合法max运算符,则替换max运算符为"?"字符
System.out.println("max: " + expression);
if(expression.matches("^(.)*max\\(\\?-\\?,\\d\