4个回答
展开全部
//分给我吧。。剩下的能自己搞定不
//搞到需求5了。。。剩下的有空继续搞
//你的想法还很不成熟,光想到用A替换。。。这个估计是人都
//都能想到,真正的关键是对所有的函数,程序块进行结构建模
//等都建模结束了,就可以简单的用正则来替换实现
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)*))","?");
//去掉替换后算式中所有的空格
expression = expression.replaceAll(" ","");
//如果有两个相邻的项中间没有操作符,则算式不合法
if(expression.matches("^??$")) {
return false;
}
/**
* 增加你需要的函数运算符,如果函数内部参数结构不同则需要改写正则表达式
*/
//如果包含合法max运算符,则替换max运算符为"?"字符
System.out.println("max: " + expression);
if(expression.matches("^(.)*max\\(\\?-\\?,\\d\\)(.)*$")) {
expression = expression.replaceAll("max\\(\\?-\\?,\\d\\)", "?");
}
System.out.println("max: " + expression);
/**
* 增加你需要的程序块运行符,如果程序块内部参数结构不同则需要改写正则表达式
*/
//FIXME if-else语句块未实现,等待实现
//如果包含合法if-else语句块,则替换if-else语句块为"?"字符
// if(expression.matches("^(.)*if\\(.)*$")) {
// expression = expression.replaceAll("max\\(\\?-\\?,\\d\\)", "?");
// }
//必须是倒数第二步:判断小括号左右括弧是否等同,括弧位置是否合法,如果括弧全部合法,则去掉所有括弧
int num = 0;
char[] expChars = expression.toCharArray();
for(int i = 0; i < expChars.length; i ++) {
char temp = expChars[i];
if(temp == '(') {
num++;
} else if(temp == ')') {
num--;
}
if(num < 0) {
return false;
}
}
if(num > 0) {
return false;
}
expression = expression.replaceAll("\\(|\\)", "");
System.out.println(expression);
//必须是最后一步:判断仅剩的+-*/四则运算算式是否合法
System.out.println(expression);
if(expression.matches("^\\?((\\+|-|\\*|\\/)\\?)*$")) {
return true;
} else {
return false;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(System.Text.RegularExpressions.IsMatch(str,"[a-zA-Z\._]"))
{
}
else{
}
{
}
else{
}
追问
[a-z-A-Z\._]就可以判断只能输入英文、小数点和空格??? 有点怀疑、、 太简单了吧
追答
那要不怎么样?
有点小误:
[a-z-A-Z\._]改成[a-z-A-Z\.\s]
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个,,,不太懂。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询