我必须使用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)

最佳答案

您正在循环中增加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();

09-27 02:15