当前位置: 代码迷 >> Java相关 >> 求助:简单的字符串操作出现异常
  详细解决方案

求助:简单的字符串操作出现异常

热度:264   发布时间:2007-11-23 14:33:45.0
求助:简单的字符串操作出现异常
目的是从控制台接入一些文法的产生式,输入格式如下:
S::=sd
A::=sad
D::=asdf
#
通过分析得到分析得到左部:
S A D
右部:
sd sad asdf
然后找出里面不重复的文法符号:
S A D a s d f
写的2个类有异常不知道怎么处理,大家帮看下!:)
public class yufafenxi {
public static void main(String []args)
{
     int i=0,count=0;
     char buffer[]=new char[1000];
     String s="";
     System.out.println("请输入产生式,以#结束:");
     while(true){
        try{
        buffer[i]=(char)System.in.read();}
        catch(Exception e){}
             if(buffer[i]=='#') break;
        i++;count++;
                }
        for(int j=0;j<count;j++)
              s+=buffer[j];
        System.out.println(s);
       isteminal teminal=new isteminal(s);
          teminal.getleft();
          teminal.getright();
        fuhao fuh=new fuhao(s);
        fuh.getfuhao();
          
    }

}
class isteminal{
     char left[]=new char[10];//求左部的终结符号从A到Z;
     String right[]=new String[10];//求右部的符号串;
     int j,k,m;
     boolean flag=true;
     String r=new String();
     public isteminal(String s)
     {
         char[] prochar = s.trim().toCharArray();
         for(int i=0;i<prochar.length;i++)
         {   
             if(prochar[i]>='A'&&prochar[i]<='Z'&&prochar[i+1]==':')
                 left[j++]=prochar[i];
             if(prochar[i]=='=')
             {     m=i;
                 while(flag)
                 { m++;
                    r+=prochar[m];
                     if(prochar[m]=='\n')
                        flag=false;
                 }
                 right[k++]=r;r="";
                 flag=true;
                 continue;
             }
         }
     }
     public void getleft()
        {        // left.length=j;
            for(int i=0;i<j;i++)
                System.out.print(left[i]+" ");
            System.out.println();
        }
     public void  getright(){
        //for(int i=0;i<k;i++)
        //System.out.print(right[i]);
        System.out.print(right[0]);
        System.out.print(right[1]);
        System.out.print(right[2]);
        
     }
}
class fuhao{ //找出文法符号的个数
     char []fh=new char[20];
     int j,k;
     public fuhao(String s)
     {
         char[] prochar = s.trim().toCharArray();
         for(int i=0;i<prochar.length;i++)
         {   
            if (prochar[i]!=':'&&prochar[i]!='='&&prochar[i]!='#'&&prochar[i]!='\n')
            {
                for(j=0;j<=k;j++)
                {
                    if(prochar[i]==fh[j]) i++;
                    //else fh[k++]=prochar[i];
                }
                 fh[k++]=prochar[i];
            }
         }
     }
     public void getfuhao(){
         for(int i=0;i<fh.length;i++)
        System.out.print(fh[i]);
     }
}
搜索更多相关的解决方案: 字符  

----------------解决方案--------------------------------------------------------
  相关解决方案