问题描述:给定一个如下格式的字符串(1,(2,3),(4,(5,6),7)),括号内的元素可以是数字,也可以是另一个括号,实现一个算法以消除嵌套的括号,例如把上面的表达式变成(1,2,3,4,5,6,7),若表达式有错误,则报错。
算法思想:问题包含两个功能①判断表达式是否正确②消除表达式中嵌套的括号。
代码如下:
package com.haobi;
/*
* 如何消除嵌套括号?
*/
public class Test1 {
public static String Delete(String s) {
String result = "(";
char[] c = s.toCharArray();
int count = 0;//计数器
//循环遍历字符数字
for(int i=0;i<c.length;i++) {
//如果遇到(左括号则计数器加1
if(c[i]=='(') {
count++;
}
//如果遇到)右括号则计数器减1
if(c[i]==')') {
if(count>0) {
count--;
}else {
System.out.println("表达式有错误!");
return null;
}
}
//如果遇到,逗号则将其添加到result中,i++,continue停止当此循环
if(c[i]==',') {
result += c[i];
}
//如果遇到0-9的数字则将其添加到result中
if(c[i]>='0'&&c[i]<='9') {
result += c[i];
}
}
//统计括号匹配的数目
if(count>0) {
System.out.println("表达式有错误!");
return null;
}
result += ")";
return result;
}
public static void main(String[] args) {
String s1 = "(1,(2,3),(4,(5,6),7))";
String result1 = Delete(s1);
if(result1 != null) {
System.out.println(result1);
}
String s2 = "(1,(2),3),(4,(5,6),7))";
String result2 = Delete(s2);
if(result2 != null) {
System.out.println(result2);
}
}
}
程序输出结果如下:
(1,2,3,4,5,6,7)
表达式有错误!