StringIndexOutOfBoundsException

 public static void main(String[] args) {
    String s = "153 asd 654";
    int count = 0;
    char c1 = 0;
    for (int i = 0; i < s.length(); i++) {
        c1 = s.charAt(i);
        if (Character.isDigit(c1)) {
            int temp = i;
            while (Character.isDigit(c1)) {
                temp++;
                count++;
                c1 = s.charAt(temp);
            }
        }
    }
    System.out.println(count);
}

выкидывает ошибку StringIndexOutOfBoundsException,если в строке дописать любую букву ошибка уходит,может кто-нибудь объяснить почему так происходит?Условие задачи такое:нужно посчитать кол-во чисел в строке


всем огромное спасибо за внимание к моему вопросу:)


Ответы (3 шт):

Автор решения: Алексей Шиманский

Смотрите на charAt. Символа по нужному индексу нет. Скорее всего в этом месте: s.charAt(temp), потому что temp у вас накручивается в плюс бесконечность))

→ Ссылка
Автор решения: Anton Shchyrov

Вы в while цикле не проверяете длину строки. Отсюда и ошибка.

Код подсчета цифр должен быть таким

public static void main(String[] args) {
    String s = "153 asd 654";
    int count = 0;
    for (int i = 0; i < s.length(); i++) {
        char c1 = s.charAt(i);
        if (Character.isDigit(c1)) {
            count++;
        }
    }
    System.out.println(count);
}
→ Ссылка
Автор решения: Исмаил
    while (Character.isDigit(c1)) {
        temp++;
        count++;
        c1 = s.charAt(temp);
    }

Вот здесь есть ошибка, temp - увеличивается "+" бесконечности, вывод такой, что c1 = s.charAt(temp) когда это строка начинает работать кидает "StringIndexOutOfBoundsException", из-за того что у тебя длина строки равно 10, а temp++ увеличивается и индекс становится 10, как ты наверняка знаешь что индексы начинают считать с 0, поэтому нету 10 индекса вот поэтому выдает ошибку.

→ Ссылка