Exception in thread "main"...哪错了?
小小纳爱斯 2011-04-22 08:38:29 错误信息:
(453,11)
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 8
at java.lang.String.charAt(String.java:687)
at LexicalAnalysis.main(LexicalAnalysis.java:23)
代码:
import java.util.*;
public class LexicalAnalysis
{
public static void main(String[] args){
TypeCode.evaluate();
String sentence="453 name";
String str="";
for(int i=0;i<sentence.length();i++){
if(isDigit(sentence.charAt(i))){
str=str+sentence.charAt(i);
while((i<sentence.length()-1) & isDigit(sentence.charAt(i+1))){
i++;
str=str+sentence.charAt(i);
}
System.out.println("("+str+","+TypeCode.typeCode.get("digitdigit*")+")");
str="";
}
else if(isLetter(sentence.charAt(i))){
str=str+sentence.charAt(i);
while(i<sentence.length()-1 & (isLetter(sentence.charAt(i+1))|| isDigit(sentence.charAt(i+1))) ){
i++;
str=str+sentence.charAt(i);
}
System.out.println("("+str+TypeCode.typeCode.get("letter(letter|digit)*")+")");
str="";
}
else if(sentence.charAt(i)==' ')
i++;
}
}
public String analysis(String sentence){
return sentence;
}
public static boolean isDigit(char a){
if(a>='0' & a<='9' ){
return true;
}
else
return false;
}
public static boolean isLetter(char a){
if((a>='A' && a<='Z') || (a>='a' && a<='z') ){
return true;
}
else
return false;
}
}
class TypeCode
{
public static Hashtable<String,Integer> typeCode= new Hashtable<String,Integer>(30);
public static void evaluate(){
typeCode.put("#", 1);
typeCode.put("begin", 2);
typeCode.put("if", 3);
typeCode.put("then", 4);
typeCode.put("while", 5);
typeCode.put("do", 6);
typeCode.put("end", 7);
typeCode.put("letter(letter|digit)*", 10);
typeCode.put("digitdigit*", 11);
typeCode.put("+", 13);
typeCode.put("-", 14);
typeCode.put("*", 15);
typeCode.put("/", 16);
typeCode.put(":", 17);
typeCode.put(":=", 18);
typeCode.put("<", 20);
typeCode.put("<>", 21);
typeCode.put("<=", 22);
typeCode.put(">", 23);
typeCode.put(">=", 24);
typeCode.put("=", 25);
typeCode.put(";", 26);
typeCode.put("(", 27);
typeCode.put(")", 28);
}
}