import java.util.Scanner;class WordsAnalyse 
{
private static String []result = new String[100];
private static int index=-1; static int isKey(String s)//判断是否关键字,返回对应的种别码
{
if(s.equals("begin")) return 1;
else if(s.equals("if")) return 2;
else if(s.equals("then")) return 3;
else if(s.equals("while")) return 4;
else if(s.equals("do")) return 5;
else if(s.equals("end")) return 6;
return 10;
} static boolean isLetter(char c)//判断是否为字母
{
if(c>='A' && c<='Z' || c>='a'&& c<='z')
return true;
return false;
} static boolean isDigit(char c)//判断是否为数字
{
if(c>='0' && c<='9')
return true;
return false;
} public static void analyses(String s)
{
for(int i =0; i <= s.length(); i++)
{
String str = "";
if(s.charAt(i) == ' ' || s.charAt(i) == '\t' || s.charAt(i) == '\n');

else if(isLetter(s.charAt(i)))
{
while(i<=s.length() && isLetter(s.charAt(i)))
{
str +=s.charAt(i);
i++;
}

result[++index]= isKey(str) + "," + str;
}

else if(isDigit(s.charAt(i)))
{
while(i<=s.length() && isDigit(s.charAt(i)))
{
str += s.charAt(i);
i++;
}

result[++index]=11 + "," + str;
}

else 
switch(s.charAt(i))
{
case '+': result[++index]=13 + "," + '+';break;
case '-': result[++index]=14 + "," + '-';break;
case '*': result[++index]=15 + "," + '*';break;
case '/': result[++index]=16 + "," + '/';break;
case ':': 
if(s.charAt(i+1) == '=') 
{
result[++index]= 18 + "," + ":=";
i++;
}
else result[++index]=17 + "," + ":";
break;
case '<': 
if(s.charAt(i+1) == '>') 
{
i++;
result[++index]= 21 + "," + "<>";
}
else if(s.charAt(i+1) == '=') 
{
i++;
result[++index]= 22 + "," + "<=";
}
else result[++index]=20 + "," + "<";
break;
case '>': 
if(s.charAt(i+1) == '=') 
{
i++;
result[++index]= 24 + "," + ">=";
}
else result[++index]=23 + "," + ">";
break;
case '=':
result[++index] = 25 + "," + '=';break;
case ';':
result[++index] = 26 + "," + ';';break;
case '(':
result[++index] = 27 + "," + '(';break;
case ')':
result[++index] = 28 + "," + ')';break;
case '#':
result[++index] = 0 + "," + '#';break;
}
}
}
public static void main(String[] args) 
{
Scanner in = new Scanner(System.in);
String s = in.nextLine();

analyses(s); for(int i=0;i<=index;i++)
System.out.println("(" + result[i] + ")");
}
}
javaString

解决方案 »

  1.   

    抛异常:
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 41
    at java.lang.String.charAt(String.java:658)
    at WordsAnalyse.analyses(WordsAnalyse.java:38)
    at WordsAnalyse.main(WordsAnalyse.java:116)
      

  2.   

    String.charAt调用超出字符串的长度范围了啊
      

  3.   

    for(int i =0; i <= s.length(); i++)
    这句,字符串的长度假设是3,那么是0,1,2 所以上面的条件判断应该是: i < s.length().