java编程错误提示:java.lang.StringIndexOutOfBoundsException: String index outofrange

import java.io.*;
public class question7 {

public static void main(String[] args) {
String aaa=null;
char ch;
int i;
int j=0,k=0,l=0,m=0;
try{
DataInputStream din=new DataInputStream(System.in);
aaa=din.readLine();
System.out.println(aaa);
System.out.print(aaa.length());
for(i=0;i<=aaa.length();i++){
ch=aaa.charAt(i);
if((ch>=65&&ch<=90)||(ch>=97&&ch<=122))
j++;
else if(ch==32)
k++;
else if(ch>=48&&ch<=57)
l++;
else m++;
}

System.out.println("英文字母个数为:"+j);
System.out.println("空格个数为:"+k);
System.out.println("数字个数为:"+l);
System.out.println("其他字符个数为:"+m);
}catch(IOException e){e.printStackTrace();}

}

}

您好:

根据您编写的代码及报错异常信息,是因为aaa.charAt(i); 方法中i的值超过了字符串的长度导致的,在for循环中,条件应该是i<aaa.length,没有 = 等号,for(i=0;i<=aaa.length();i++)

具体代码如下:

供参考,希望对你有帮助!

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-02-09
import java.io.*;
public class question7 {

public static void main(String[] args) {
String aaa=null;
char ch;
int i;
int j=0,k=0,l=0,m=0;
try{
DataInputStream din=new DataInputStream(System.in);

////mychange
//aaa=din.readLine();
BufferedReader br = new BufferedReader(new InputStreamReader(din));
aaa=br.readLine();
////mychange end

System.out.println(aaa);
System.out.println(aaa.length());

////mychange
//for(i=0;i<=aaa.length();i++){
for(i=0;i<aaa.length();i++){
////mychange end
System.out.println("i="+i);
ch=aaa.charAt(i);

if((ch>=65&&ch<=90)||(ch>=97&&ch<=122))
j++;
else if(ch==32)
k++;
else if(ch>=48&&ch<=57)
l++;
else m++;
}

System.out.println("英文字母个数为:"+j);
System.out.println("空格个数为:"+k);
System.out.println("数字个数为:"+l);
System.out.println("其他字符个数为:"+m);
}catch(IOException e){e.printStackTrace();}

}

}

我用的是1.6的编译器,所以中间改了一段代码。
还有就是那for处
出现异常的原因就是你的字符串数组下标溢出了。本回答被提问者采纳
第2个回答  2011-05-02
for(i=0;i<=aaa.length();i++){

这一句吧,改成i<aaa.length();
什么原因 学程序的人都懂得。
第3个回答  2018-03-28
for (i = 0; i < aaa.length(); i++) { //不要加"=",你的数组没有那么长,会造成
角标越界
相似回答