求助:简单的字符串操作出现异常
目的是从控制台接入一些文法的产生式,输入格式如下: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]);
}
}