Java中的计数循环中的StringIndexOutOfBoundsException

时间:2017-12-01 16:13:30

标签: java string stringindexoutofbounds

我必须使用Java编写类的代码,其中字母E的出现次数被计算并打印出来(包括两种情况)。这就是我所拥有的。

String sVerse = "As we enter our centennial year we are still young ";

System.out.println(sVerse);

int len3 = sVerse.length();
int countE = 0;

for (int d = 0; d <= len3; d++){
    char e = sVerse.charAt(d);
    d = d + 1;

    if (e == 'e' || e == 'E')
    {
        countE = countE + 1;
    }
    else
    {
        countE = countE;
    }
}

System.out.println(countE);

代码运行,字符串打印,但在字符串打印后,我收到此错误:

 java.lang.StringIndexOutOfBoundsException: String index out of range: 1258
    at java.lang.String.charAt(Unknown Source)
    at Unit4plus.main(Unit4plus.java:125)

3 个答案:

答案 0 :(得分:1)

你在循环中增加d,你不应该 - 只是让for循环做它的事情。此外,您应该使用<终止循环,而不是<=

int countE = 0;
for (int d = 0; d < len3; d++) {
    char e=sVerse.charAt(d);

    if (e=='e' || e=='E') {
        countE++;
    }
}

但坦率地说,你可以直接在字符串中流式传输字符,以获得更优雅的解决方案:

long countE = sVerse.chars().filter(c -> c == 'e' || c == 'E').count();

答案 1 :(得分:1)

你在第一个循环中的条件应该是:

d < len3

因为长度从1开始,但字符串中的字符索引是基于0的。

此外,for循环中的语句d = d + 1是无用的,因为你已经在for循环中使用

增加它,所以你会逐步迭代2。
d++

答案 2 :(得分:0)

您需要更改循环的条件,因为长度是最大索引的+1。您还要增加变量的值&#34; d&#34;两次,一次定义为&#34; for&#34;循环,另一个在里面。尝试使用以下代码替换它:

        String sVerse = "As we enter our centennial year we are still young";
        int len3 = sVerse.length();
        int countE = 0;
        for (int d = 0; d < len3; d++) {
            char e = sVerse.charAt(d);
            if (e == 'e' || e == 'E')
                countE++;
        }
        System.out.println(countE);