Exception in thread "main" java.lang.StringIndexOutOfBoundsException
运行的时候总是报错。一个简单地词法分析器。错误原因:Exceptioninthread"main"java.lang.StringIndexOutOfBoundsExce...
运行的时候总是报错。一个简单地词法分析器 。 错误原因:Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 278 at java.lang.StringBuffer.charAt(Unknown Source) at WordAnalysis.Analysis(WordAnalysis.java:58) at WordAnalysis.main(WordAnalysis.java:107)
用到charAT函数的代码:
public void Analysis(){
int i=0;
char ch;
while(i<buffer.length()){
ch=buffer.charAt(i);
if(isLeter(ch))
{
StringBuffer temp=new StringBuffer() ;
temp.append(ch);
ch=buffer.charAt(++i);
while(isLeter(ch)||isDigit(ch))
{
temp.append(ch);
ch=buffer.charAt(++i);
}
if(isKeyword(temp.toString()))
System.out.println("( 1,“ "+temp+" ”)");
else
System.out.println("( 2,“ "+temp+" ”)");
}
else if((ch==';')||(ch==',')||(ch=='(')||(ch==')')||(ch=='{')||(ch=='}')||(ch=='"'))//判断是否为分隔符
{
System.out.println("( 5,“ "+ch+" ”)");
i++;
} 展开
用到charAT函数的代码:
public void Analysis(){
int i=0;
char ch;
while(i<buffer.length()){
ch=buffer.charAt(i);
if(isLeter(ch))
{
StringBuffer temp=new StringBuffer() ;
temp.append(ch);
ch=buffer.charAt(++i);
while(isLeter(ch)||isDigit(ch))
{
temp.append(ch);
ch=buffer.charAt(++i);
}
if(isKeyword(temp.toString()))
System.out.println("( 1,“ "+temp+" ”)");
else
System.out.println("( 2,“ "+temp+" ”)");
}
else if((ch==';')||(ch==',')||(ch=='(')||(ch==')')||(ch=='{')||(ch=='}')||(ch=='"'))//判断是否为分隔符
{
System.out.println("( 5,“ "+ch+" ”)");
i++;
} 展开
3个回答
展开全部
// 字符串索引超出边界了
/*
API:
此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。对诸如 charAt
的一些方法,当索引等于字符串的大小时,也会抛出该异常。
*/
// 可能出现问题的语句
while(isLeter(ch)||isDigit(ch)){
temp.append(ch);
// 这里有可能字符串索引越界, 注意你的while入口条件 : i<buffer.length()
ch=buffer.charAt(++i);
}
// 错误示例:
StringBuffer buffer = new StringBuffer("abc");
// 当进入while之后, 假设此时 i == buffer.length()-1 --> 2
// 当程序试图执行下列代码时抛出异常
ch=buffer.charAt(++i);
// ch=buffer.charAt(3);
希望能帮助你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你文件的58行是哪一行?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询