[ERRO EM JAVA]: java.lang.StringIndexOutOfBoundsException: String index out of range: at java.lang.String.charAt(String.java:646)

Alguém pode me dizer onde está o erro e como corrigi-lo? Sei que o erro está, provavelmente, nos If’s, porém está compilando direitinho, o problema é na execução do programa. Desde já, obrigado!

OBS: Não importa o tamanho da frase ou quantos caracteres são digitados, sempre ocorre este erro. A única diferença é o número que aparece após os dois pontos em " String index out of range: " que é o número de caracteres que a frase contém.
Aqui vai a parte do meu algoritmo:

    int nroCaracteres = frase.length();
    char primeiroCaracter = frase.charAt(0);
    int andador = 0;
    
    System.out.println ("A frase possui: "+nroCaracteres+ " caracteres." );

    int cont1 =0;
    int cont2 =0;
    int cont3 =0;
    

    while(andador<=nroCaracteres)
    {
        if (frase.charAt(andador)=='Q'|| frase.charAt(andador)=='W' || frase.charAt(andador)== 'E' ||frase.charAt(andador)=='R'|| 
        frase.charAt(andador)=='T'||frase.charAt(andador)=='Y' ||frase.charAt(andador)=='U'|| frase.charAt(andador)=='I'||
        frase.charAt(andador)=='O' || frase.charAt(andador)=='P')
        { 
           cont1++;
        }
        
        if (frase.charAt(andador)=='A'|| frase.charAt(andador)=='S' || frase.charAt(andador)=='D' || frase.charAt(andador)=='F'||
        frase.charAt(andador)=='G'|| frase.charAt(andador)=='H' || frase.charAt(andador)=='J'||
        frase.charAt(andador)=='K'|| frase.charAt(andador)=='L')
        {
            cont2++;
        }
        
        if (frase.charAt(andador)=='Z'|| frase.charAt(andador)=='X' || frase.charAt(andador)=='C' || frase.charAt(andador)=='V'||
        frase.charAt(andador)== 'B' ||frase.charAt(andador)=='N' ||frase.charAt(andador)=='M')
        {
            cont3++;
        }
        
        andador++;
        
    }

E A MENSAGEM DE ERRO : java.lang.StringIndexOutOfBoundsException: String index out of range: 17
at java.lang.String.charAt(String.java:646)
at Avaliacao2.main(Avaliacao2.java:33)

Se a string tem 10 chars, as suas posições são de 0 a 9. Ao fazer <= aqui, vais tentar aceder à posição 10 e ter o erro em causa. Tens de mudar para

while(andador < nroCaracteres)
1 curtida

Tome cuidado com o trecho “frase.charAt(andador)”, caso a frase não possua a letra informada no andador, ele vai dar StringIndexOutOfBoundsException.

Era isso mesmo pmlm, deu certo. Obrigado pela ajuda !