字符串索引超出范围?哪里?

时间:2014-09-08 17:41:34

标签: java exception for-loop runtime-error java.lang.class

这是我找到号码的代码。字符串中的元音:

{
    String inyo=inpeo.getText().toLowerCase();
    System.out.println(inyo); // Just checking for an empty string

    int vowcount=0;
    for(int i=0;i<=inyo.length();i++)
 {           
        char rol=inyo.charAt(i);
        if(rol=='o'||'u'==rol||rol=='a'||rol=='e'||rol=='i')
        {
            vowcount=vowcount+1;
            System.out.println(vowcount);
        }

        numout.setText(""+vowcount);

    }
}                                        

现在,输出没有任何问题 - 找到确切的否。我想要的元音但它给了我这个错误:

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(String.java:646)
at WordCheck.jButton2ActionPerformed(WordCheck.java:147)
// Extra errors removed as they're irrelevant to my issue

因此,除了关闭和重新启动程序之外,无法重新使用该程序。当输出按需要出现时,为什么我会收到此错误?我也没有得到任何空的弦乐。

4 个答案:

答案 0 :(得分:3)

for循环的最后一次迭代导致异常(i == inyo.length()时)。只需将其替换为:

for(int i=0; i<inyo.length(); i++)

答案 1 :(得分:3)

i<=inyo.length()在这里。 String索引从0开始。长度计数从1开始。因此,当String的长度为5时,String的最后一个索引是4。

应该是

i<inyo.length()

答案 2 :(得分:1)

你的for循环太过分了,这个

for(int i=0;i<=inyo.length();i++)

应该是

for(int i=0;i<inyo.length();i++)

请注意,当i == invo.length()传递数组末尾时,因为Java开始使用0进行索引。

答案 3 :(得分:1)

for循环应该是

for(int i=0; i<inyo.length(); i++)

目前,当它进入最后一次迭代时,字符串的索引是4而inyo.length()是5.因此它会导致越界。