Replace em StringBuffer com problemas na hora da execucao

Ola, estou estudando StringBuffer e estou tendo um problema na hora de fazer um replace

[code]public class Case {
public static void main(String[] args){
StringBuffer frase = new StringBuffer();
String palavras;
frase.append(“Vamos colocar essa frase no estilo maluco!”);
int qtd_letras = frase.length();
char letra;
for (int i = 0; i < qtd_letras; i++) {
int resultado = i % 2;
if (resultado == 0){
letra = frase.charAt(i);
String letra2 = Character.toString(letra);
letra2 = letra2.toUpperCase();

	frase.replace(0, 1, letra2); 
            // NESSE REPLACE SE EU COLOCO O NUMERO 0 ELE FUNCIONA MAS SE EU COLOCO A VARIAVEL i
           // ELE DA PAU NA HORA DE EXECUTAR
	System.out.println(frase);
	}
}

}

}[/code]

O erro de saida e o seguinte:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: start > en
d
        at java.lang.AbstractStringBuilder.replace(Unknown Source)
        at java.lang.StringBuffer.replace(Unknown Source)
        at Case.main(Case.java:17)

sinceramente esotu confuso pra ca***** com esse codigo ai. se alguem puder ajudar ficarei muito grato :lol:

Abracos…

sera que isso e um bug?

alguem por favor tenta compilar e me fala o resultado. ou se eu estiver fazendo errado me auxiliem.
sou novo no mundo java.

origado

Cara, olhando no javadoc (http://java.sun.com/j2se/1.5.0/docs/api/), temos a seguinte informação:

Ou seja, vc tem que fornecer o início e o fim, se vc colocar ‘i’ no lugar do 0, ele irá substituir por exemplo de 5 até 1, vc tem que colocar por exemplo de i e ++i na chamanda do método, o código ficaria assim:

public class Case {   
    public static void main(String[] args){   
    StringBuffer frase = new StringBuffer();   
    String palavras;   
    frase.append("Vamos colocar essa frase no estilo maluco!");   
    int qtd_letras = frase.length();   
    char letra;   
    for (int i = 0; i < qtd_letras; i++) {   
        int resultado = i % 2;   
        if (resultado == 0){   
           letra = frase.charAt(i);   
           String letra2 = Character.toString(letra);   
           letra2 = letra2.toUpperCase();   
  
           frase.replace(i, ++i, letra2);   
                // você anda com o início e com o final, quando i for 6, o inicio será 6 e o final será 7
           System.out.println(frase);   
        }   
    }   
       
    }   
}  

Pow, era isso mesmo!

confundi o fim com o tamanho, não prestei atenção na documentação.

Muito obrigado Bruno obrigado mesmo! Abraços…;.