消除嵌套的括号:①判断表达式是否正确②消除表达式中嵌套的括号;
对于①,可从如下入手:
1、表达式中只有数字、逗号和括号这三种字符,如有其它字符出现则是非法表达式;
2、判断括号是否匹配,
若碰到“(”,则括号计数器加1;
若碰到“)”,
此时在判断计算器值是否大于1,若是,计算器减1;否则为非法表达式
3、当遍历完表达式后,若括号计数器为0,则说明括号是配对出现的,否则说明括号不匹配,则表达式非法。
package other;
/**
* @author wyl
* @time 2018年7月9日上午8:55:21
*/
public class Test {
public static String change_str(String s){
String result="(";
char[] ch=s.toCharArray();
int bracket_num=0;
int i=0;
while(i<ch.length){
if (ch[i]=='(') {
bracket_num++;
}else if (ch[i]==')') {
if (bracket_num>0) {
bracket_num--;
}else {
System.out.println("表达式有误!\n");
return null;
}
}else if (ch[i]==',') {
result+=ch[i++];
continue;
}else if (ch[i]>='0'&&ch[i]<='9') {
result+=ch[i];
}else {
System.out.println("表达式有误!\n");
return null;
}
i++;
}
if (bracket_num>0) {
System.out.println("表达式有误!\n");
return null;
}
result+=")";
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="(1,(2,3),(4,(5,6),7))";
String result=change_str(s);
if (result!=null) {
System.out.println(result);
}
s="((1,(2,3),(4,(5,6),7))";
result=change_str(s);
if (result!=null) {
System.out.println(result);
}
}
}