思路:可以用一个整数来存储括号匹配情况,初始化为0.遇到左括号+1 ,遇到右括号-1.最后程序运行起来,看这个整数是否为零。
注意:这个整数不能为负数,为负数就说明右括号在前,所以遇到这种情况就判错,结束程序。
注意:如果有不同的符号需要判断,如大括号,小括号等等,可以采用不同的整数来分别判断相应的符号。
【暂时先不考虑语义化问题,如{(( } )) 】
以下是实现的两种方法:
public class Demo {
// 判断括号是否匹配
public static boolean isBracketMatch(String content) {
//碰到左括号+1 碰到右括号-1
int left=0;
int right =content.length();
int danum=0;
int xiaonum=0;
while(left<right){
if(content.charAt(left)=='{'){
danum++;
}
if(content.charAt(left)=='('){
xiaonum++;
}
if(content.charAt(left)=='}'){
danum--;
if(danum<0)
{
return false;
}
}
if(content.charAt(left)==')'){
xiaonum--;
if(xiaonum<0)
{
return false;
}
}
left++;
}
if(danum!=0||xiaonum!=0){
return false;
}
return true;
}
public static void main(String[] args) {
System.out.println(isBracketMatch("public void run(int a){if(a == 1){System.out.println(a)}}"));
System.out.println(isBracketMatch("public void run(int a){if(a == 1)System.out.println(a)}}"));
}
}
public class Demo {
// 判断括号是否匹配
public static boolean isBracketMatch(String content) {
// 用两个整数存储括号值,出现左括号就+1,出现右括号则-1
int bracketNum = 0;
int bigBracketNum = 0;
for (int i = 0; i < content.length(); i++) {
char c = content.charAt(i);
if (c == '(') {
bracketNum++;
}
if (c == '{') {
bigBracketNum++;
}
if (c == ')') {
bracketNum--;
// 不能出现负值,负值表示右括号先出现。
if (bracketNum < 0) {
return false;
}
}
if (c == '}') {
bigBracketNum--;
// 不能出现负值,负值表示右括号先出现。
if (bigBracketNum < 0) {
return false;
}
}
}
if (bigBracketNum != 0 || bracketNum != 0) {
return false;
}
return true;
}
public static void main(String[] args) {
System.out.println(isBracketMatch("public void run(int a){if(a == 1){System.out.println(a)}}"));
System.out.println(isBracketMatch("public void run(int a){if(a == 1)System.out.println(a)}}"));
}
}