System.out.println("111111111");
    String s = "(A+B*C)";
    int i = 0,j = 0,m = -1,n = -1;
    m = s.indexOf("(",0);
    while(m!=-1){
      i++;
      m = s.indexOf("(",m+1);
    }
    n = s.indexOf(")",0);
    while(n!=-1){
      j++;
      n = s.indexOf(")",n+1);
    }    if(i == j){
      System.out.println("right!");
    }else{
      System.out.println("erro!");
    }
不知道是不是这个意思

解决方案 »

  1.   

    public class text {
      public text() {
      }
      /**
       * 字符串去全角半角空格
       * @param s String
       * @return String
       */
      private static String stringTrim(String s){
        s = s.replaceAll(" ","");
        s = s.replaceAll(" ","");
        return s;
      }
      /**
       * 判断括号个数是否合适
       * @param s String
       * @return boolean
       */
      private static boolean kuoHao(String s,String zuo,String you){
       int i = 0,j = 0,m = -1,n = -1;
       m = s.indexOf(zuo,0);
       while(m!=-1){
         i++;
         m = s.indexOf(zuo,m+1);
       }
       n = s.indexOf(you,0);
       while(n!=-1){
         j++;
         n = s.indexOf(you,n+1);
       }   if(i == j){
         return true;
       }else{
         return false;
       }
     }
     /**
      * 判断运算符是否合理
      * @param s String 要判断的字符串
      * @param y String 运算符
      * @return boolean
      */
     private static boolean yunSuanFu(String s,String y){
      int m = -1;
      m = s.indexOf(y,0);
      if(m == 0){//运算符再第一位
        return false;
      }
      if(m == s.length() - 1){//运算符再最后位
        return false;
      }
      while(m != -1){
        if(qian(s.charAt(m-1))){
          if(hou(s.charAt(m+1))){
            m = s.indexOf(y,m+1);
          }else{
            return false;
          }
        }else{
          return false;
        }
      }
      return true;
    }
    /**
     * 判断运算符的前是否合理
     * @param s String
     * @return boolean
     */
    private static boolean qian(char c){
      char[] bia = {'(','{','[','+','-','*','/'};
      for(int i = 0; i<bia.length;i++){
        if(bia[i]==c){
          return false;
        }
      }
      return true;
    }
    /**
     * 判断运算符的后是否合理
     * @param s String
     * @return boolean
     */
    private static boolean hou(char c){
      char[] bia = {')','}','[','+','-','*','/'};
      for(int i = 0; i<bia.length;i++){
        if(bia[i]==c){
          return false;
        }
      }
      return true;
    }private static boolean iDo(String s){
            boolean state = false;
            s = stringTrim(s);
            if(kuoHao(s,"(",")")){
              if(yunSuanFu(s,"+")){
                state = true;
              }
              else{
                state = false;
              }
            }
            else{
              state = false;
            }
            if(!state){
              return state;
            }
            if(kuoHao(s,"(",")")){
              if(yunSuanFu(s,"-")){
                state = true;
              }
              else{
                state = false;
              }
            }
            else{
              state = false;
            }
            if(!state){
              return state;
            }
            if(kuoHao(s,"(",")")){
              if(yunSuanFu(s,"*")){
                state = true;
              }
              else{
                state = false;
              }
            }
            else{
              state = false;
            }
            if(!state){
              return state;
            }
            if(kuoHao(s,"(",")")){
              if(yunSuanFu(s,"/")){
                state = true;
              }
              else{
                state = false;
              }
            }
            else{
              state = false;
            }
            if(!state){
              return state;
            }
            
        return state;    
            
    }
      public static void main(String[] args){
        String s = "5(1+2+3+(4)  +5)5";
        if(iDo(s)){
          System.out.println("right!");
        }
        else{
          System.out.println("erro!");
        }
        
        System.out.println("the end");
      }
    }
    我写了一个,估计问题很多。大家一起帮忙测一下
      

  2.   

    很遺憾,我沒有學過編譯原理,現在一下子也沒有時間學.我就先照huangdeji(强大的太阳)寫寫看吧.如果各位還有什麼好的東東,讓大家學學!等我有好的結果再拿出來和大家共享.