Replace em StringBuffer com problemas na hora da execucao

3 respostas
N

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

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);
		}
	}
	
	}
}

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....

3 Respostas

N

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

bruno.leite

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);   
        }   
    }   
       
    }   
}
N

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…;.

Criado 17 de agosto de 2008
Ultima resposta 18 de ago. de 2008
Respostas 3
Participantes 2