Transformar binário em número

Eu estou tentando construir um decifrador que transformara o binário em um número, elevando o número pela sua posição, mas ao usar o método charAt eu não consigo usar uma variável int para ler um digito especifico.
Para quiser ver o codigo, ou querer deixar uma dica:

import java.util.Scanner;

public class DecodificadorDeBinarios {

public static void main(String[] args) {

    Scanner teclado = new Scanner(System.in);

    boolean comeco = false;

    do {

        System.out.println("Descodificador de números em binário");

        System.out.print("Texto para codificar: ");

        String texto = teclado.nextLine();

        int quantidadeDigitos = texto.length();

        while (quantidadeDigitos > 0) {

            char digito = texto.charAt(quantidadeDigitos);

            System.out.println(digito);

        }

    } while (comeco);

}

}

Talvez seja melhor usar um for em vez de while.

for (int i = 0; i < texto.length(); i++) {
  texto.charAt(i);
}

É isso?

O problema esta no “int digito = texto.charAt(quantidadeDeDigitos);” onde é expulso com a mensagem:

Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range:

Eu pesquisei mas, não entendi o que quiseram dizer com o “os índices de uma string vão de 0 até até o length()-1”

E do for depois eu percebi que era melhor ele

Suponha que a string tem 10 caracteres. Então o tamanho dela (o length()) é 10.

Só que os índices começam do zero: o primeiro caractere está na posição zero, o segundo na posição 1, o terceiro na posição 2, e assim por diante. Então o décimo caractere está na posição 9.

Por isso, de forma geral, os índices vão de zero até o tamanho da string menos 1 (length() - 1).

Quando você declara um vetor de qualquer quantidade, o primeiro elemento do vetor sempre vai ser a posição 0, não 1. Então se você quiser, por exemplo, acessar a primeira posição, você vai ter que falar 0 ao invés de 1. Se em um vetor de 9 posições você quiser acessar a nona posição, você não vai falar que quer acessar a posição 9, mas sim a 8.

Por isso que se diz que “os índices vão de 0 até length() - 1”. Porque, em um vetor de tamanho X, os índices não vão de 1 até X, mas sim de 0 até X-1.

Caramba, agora eu entendi. Eu até sabia que começava em 0, mas como ele retomava a quantidade de dígitos literal, só foi preciso tirar o -1