判断括号是否匹配(有左括号,就要有右括号)

 思路:可以用一个整数来存储括号匹配情况,初始化为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)}}"));
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值