错误:线程“main”java.lang.StringIndexOutOfBoundsException中的异常

时间:2013-07-11 14:03:57

标签: java string counter bufferedreader

我一直在尝试执行这个程序,很多人会发现它有点无用。不过我收到了这个错误:线程中的例外" main"执行时java.lang.StringIndexOutOfBoundsException。这个程序是找到元音,辅音,特殊字符等的数量,我最近得到了这个错误。请帮帮我。这是什么错误,如何从我的代码中删除它。提前谢谢。

import java.io.*;
public class numberof {
public static void main(String args[])throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter string");
String str=br.readLine();
int vowel=0,consonant=0,upcase=0,locase=0,special=0,dig=0;
int l=str.length();
for(int in=1;in<=l;in++){         //This also is being displayed as an error
    char c=str.charAt(in);            //This is the error Line.
    if(c>=65||c<=90||c>=97||c<=123){
        if(c=='a'||c=='A'||c=='e'||c=='E'||c=='o'||c=='O'|c=='u'||c=='U'){
            vowel++;
            if(c>=65 && c<=90){
                upcase++;
                }
            else{
                locase++;
              }
        }
        else{
            consonant++;
            if(c>=65 && c<=90){
                upcase++;
            }
            else{
                locase++;

                    }
                }

            }
    else if(c>=48 && c<=57){
        dig++;
        }
    else{
        special++;
    }

    }
    System.out.println(upcase+" "+locase+" "+vowel+" "+consonant+" "+dig+" "+special);
}
   }

3 个答案:

答案 0 :(得分:2)

for(int in=1;in<=l;in++)

应该是

for(int in=0;in<l;in++)

数组索引从ZERO(in =0开始,假设您需要第一个元素)

编辑:

l的长度为String[],让我们说5分为a[0], a[1], a[2], a[3], a[4]

如果您观察到,现在您可以从0(或)1(或)2开始,但最大值只能达到a[4],当您使用in <=时,循环将检查直到[ 5]抛出indexoutofBounds异常。

答案 1 :(得分:0)

在你的for循环中,你从索引1开始并在小于或等于。

时循环
for (int in = 1; in <= l; in++) {}

这意味着你将比你想要的更多地循环2。所以它应该是:

for (int in = 0; in < l; in++) {}

数组索引从零开始,因此它从0循环到长度,而不是从1循环到长度。

另一种写作方式是这样的:

for(int i = 0; i < str.length(); i++) {}

大多数Java开发人员会发现这更容易阅读。

答案 2 :(得分:0)

你想从第一个字符开始搜索所有字符串中的元音吗?使用for(int in=0; in<l; in++)