Porque o método replace() do objeto String não funciona?[Resolvido]

6 respostas
N

bem o código é esse:

...
String texto = "a\\b\\c";
System.out.println(texto);
texto.replace("\\", "/");
System.out.println(texto);
...

E aí alguém sabe porque isso não funciona?

6 Respostas

P

tente assim

...   
String texto = "a\\b\\c";   
System.out.println(texto);   
texto = texto.replace("\\", "/");   
System.out.println(texto);   
...
F

http://www.guj.com.br/article.show.logic?id=103
:wink:

V

Isso não funciona pq todos o String é imutável. Todos os métodos que “alteram” o valor da string, na verdade, criam uma nova string, com o valor alterado.

Por isso a linha 4 do colega envolve atribuir à variável de referência texto, o conteúdo dessa nova String gerada.

N

Valeu galera,

achei que tava ficando maluco.

Bem, só para repetir a solução aqui no final para facilitar a vizualização.

...     
String texto = "a\\b\\c";     
System.out.println(texto);     
texto = texto.replace("\\", "/");     
System.out.println(texto);     
...

:wink:

P

Em java as Strings são imutaveis. Em outras linguagens como Ruby isso não é verdade (veja o método upcase!) mas a imutabilidade um padrão interessante.

Imagine o problema

String nome = Bill Gates;

Fortuna.setNomeHerdeiro(nome);

nome.replace(Bill Gates,Steve Jobs);

/* se string não for imutavel, Steve Jobs acabou de ganhar uma bolada */
V

Em C++, strings são mutáveis.

Por outro lado, um método pode prometer para você que não alterará o conteúdo de uma string. E o interessante, é que o compilador vai garantir que ele cumpra essa promessa:

void Fortuna::setNome(const std::string& nome) 
{
    this->nome = nome; //ativa a construção de cópia
}

O interessante é que você pode ter métodos, que também garantem que nenhum estado será alterado. São os métodos const.

//Pode chamar getSortudo() à vontade. //Não vai mudar de sortudo no meio do caminho. void Fortuna::getSortudo() const { return nome; }

Criado 13 de outubro de 2009
Ultima resposta 13 de out. de 2009
Respostas 6
Participantes 5