Como dar um replace em uma String sem criar uma nova instancia da Classe String
Como assim ???
n tem que criar nenhuma instancia:
Ex. remover espaços em branco:
String texto = "ESTE TEXTO POSSUI ESPAÇOS EM BRANCO ! !";
texto = texto.replace("\\s","");
Mas o metodo replace não ira te retornar uma nova instancia de String?
Sim eu sei que String é imutavel mas nao tem como contornar isto de alguma forma? Ex: outra classe que realize a mesma função…
Não estou entendendo o que vc quer…
Pseudo-codigo para demonstrar:
String teste = "abc"; aqui eu tenho uma instancia de String
teste = teste.replace("b", "d"); aqui vou ter duas instancias de String porque o replace ira me retornar uma nova String
O que eu quero:
teste.replaceInstancia("b", "d"); assim trocariamos o caractere na mesma instancia.
Não tem como.
Strings são imutáveis.
O máximo que vc pode fazer é usar um StringBuilder no lugar:
StringBuilder sb = new StringBuilder(suaString);
//Trabalhe sobre o stringBuilder
suaString = sb.toString(); //O resultado volta para a String.
Sad But True…
Tentei o seguinte workaround:
Transformo a String para um array de char, faço todos os repleces que necessito e somente no final recrio a String novamente…
So que implementar o replace de String é um pouquinho mais difícil do que imaginava…
e qual a finalidade de tal implementaçao?
Então usa o StringBuilder, como demonstrei.
Vc tem um texto grande onde tem que trocar varias posições deste texto por informações vindas do banco ao dar um Replace nesse texto vc acaba criando muitas instâncias dele em memória que acabam estourando a memória da aplicação…
Se as instâncias forem descartadas, aí a memória não estoura.
Haverá garbage collection antes disso.
Um exemplo de operação onde a instância é discartada seria:
x = x.replace("a", "b"); //O antigo valor de x é descartado
Em todo caso, use o StringBuilder também por motivos de performance. Se você processa muito texto, ele representa uma cadeia de caracteres mutáveis.
Verdade Vini, quando vc falou em algo estar segurando as referencias em memória me lembrei que no final o texto é adicionado em um ArrayList então la ele ficava com vários textos em memória…
Bom estou, mandando salvar em texto para ver se da certo…