StringIndexOutOfBoundsException в цикле подсчета в Java

Я должен написать код для класса с использованием 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 ответа

Вы увеличиваете 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();

Ваше условие в первом цикле должно быть:

d < len3

Поскольку длина начинается с 1, а индекс символов в вашей строке равен 0.

Более того, ваше утверждение d=d+1 в цикле for бесполезно и заставляет вас повторять 2 на 2, так как вы уже увеличиваете его в цикле for с помощью

d++

Вам необходимо изменить условие для цикла, поскольку длина равна +1 от максимального индекса. Вы также увеличиваете значение переменной "d" в два раза, один в определении цикла "for", а другой - внутри. Это. Попробуйте заменить его следующим кодом:

        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); 
Другие вопросы по тегам