[Resolvido] Problema com String replaceAll

Bom galera,

Estou precisando substituir uma string por outra em um ArrayList, então resolvi utilizar o replaceAll, porém ele não funciona segue o método abaixo:

 private void replaceHtmls(int position){
        String replace = new String();
        replace = listaHtmls.get(position);
        replace.replaceAll("traumatismo ", "TEXTO");
        listaHtmls.add(position, replace);

        System.out.println(listaHtmls.get(position));
    }

No caso essa listaHtmls é uma lista de htmls que foram transformadas em string e pelo console a string está igual ao html, teoricamente o replaceAll era alterar onde encontrasse a palavra traumatismo porém ele não altera. Segue o html abaixo:

<body>
	<div id="wrap">
		<h1 class="titulo1">CLASSIFICAÇÕES DO TCE</h1>
		<p>O traumatismo crânio-encefálico pode ser classificado sob o aspecto temporal, pela o biomecânico e a topografia das lesões.</p>
		<p><b class="bold">A)</b> Classificação temporal:</p>
        <ul class="lista">
        	<li>Lesões primárias: ocorrem no momento do trauma. Inclui as contusões corticais, as lacerações, fraturas, lesões axonais difusas e contusão do tronco cerebral.</li>
            <li>Lesões secundárias: ocorrem subsequentemente à lesão primária. Incluem lesões por hematomas intracranianos, edema, hipóxia e isquemia.</li>
        </ul>
		<br>
        <p><b class="bold">B)</b> Biomecânica:</p>
		<ul class="lista">
            <li>Traumatismo crânio-encefálico fechado;</li>
            <li>Traumatismo crânio-encefálico aberto;</li>
        </ul>
		<br>
		<p><b class="bold">C)</b> Topográfica:</p>
        <ul class="lista">
        	<li>Lesões focais: lesão de partes moles, fraturas, contusões e hematomas intracranianos.</li>
            <li>Lesões difusas: lesão axonal difusa, lesão encefálica hipóxica, tumefação cerebral difusa e lesão vascular focal múltipla.</li>
        </ul>
</div>
</body>
 replace = replace.replaceAll("traumatismo ", "TEXTO");  

se você printar essa String no console, ela aparece como ?

Ela aparece do mesmo jeito que eu coloquei o html, no caso assim

    <body>  
        <div id="wrap">  
            <h1 class="titulo1">CLASSIFICAÇÕES DO TCE</h1>  
            <p>O traumatismo crânio-encefálico pode ser classificado sob o aspecto temporal, pela o biomecânico e a topografia das lesões.</p>  
            <p><b class="bold">A)</b> Classificação temporal:</p>  
            <ul class="lista">  
                <li>Lesões primárias: ocorrem no momento do trauma. Inclui as contusões corticais, as lacerações, fraturas, lesões axonais difusas e contusão do tronco cerebral.</li>  
                <li>Lesões secundárias: ocorrem subsequentemente à lesão primária. Incluem lesões por hematomas intracranianos, edema, hipóxia e isquemia.</li>  
            </ul>  
            <br>  
            <p><b class="bold">B)</b> Biomecânica:</p>  
            <ul class="lista">  
                <li>Traumatismo crânio-encefálico fechado;</li>  
                <li>Traumatismo crânio-encefálico aberto;</li>  
            </ul>  
            <br>  
            <p><b class="bold">C)</b> Topográfica:</p>  
            <ul class="lista">  
                <li>Lesões focais: lesão de partes moles, fraturas, contusões e hematomas intracranianos.</li>  
                <li>Lesões difusas: lesão axonal difusa, lesão encefálica hipóxica, tumefação cerebral difusa e lesão vascular focal múltipla.</li>  
            </ul>  
    </div>  
    </body>  

Você tentou o que eu postei?
o método replaceAll não é uma void, é um método que devolve uma String, que é a String que você quer. Se você não atribuir essa nova String a nenhuma referência, ela ficará perdida.

Uma forma fácil de entender a lógica de replace, replaceAll, trim, substring etc. não modificarem a string e sim retornarem uma string modificada é a seguinte:

String é uma classe cujos objetos são imutáveis.

Você pode modificar uma variável do tipo String, atribuindo uma nova String.

Mas não pode alterar uma instância de uma String.

Portanto, replaceAll, como não pode modificar a String, tem de retornar uma nova String modificada do jeito que você precisa.

tenta como o ErickRAR disse …

replace = replace.replaceAll("traumatismo ", "TEXTO");

se não rolar tenta o:

replace = replace.replace("traumatismo ", "TEXTO");

pq ta fazendo isso no lado java?
pq nao faz com javascript ?!?!

[quote=ErickRAR]Você tentou o que eu postei?
o método replaceAll não é uma void, é um método que devolve uma String, que é a String que você quer. Se você não atribuir essa nova String a nenhuma referência, ela ficará perdida.[/quote]

Entendi, tentei duas coisas porém não funcionaram a primeira foi:

replace.replaceAll("traumatismo", "TESTEEEEEEEEEE"); 

Em nenhum método e quando eu dou o printl ele continua vindo sem a modificação. E a segunda foi colocando ele em um método que retorna uma string que também não fez o replace.

private String replaceHtmls(){
        String replace = new String();
        replace = listaHtmls.get(2);
        replace.replaceAll("traumatismo", "TESTEEEEEEEEEE");        

//        System.out.println(listaHtmls.get(position));
//        System.out.println(replace);
		return replace;
    }

[quote=entanglement ]Uma forma fácil de entender a lógica de replace, replaceAll, trim, substring etc. não modificarem a string e sim retornarem uma string modificada é a seguinte:

String é uma classe cujos objetos são imutáveis.

Você pode modificar uma variável do tipo String, atribuindo uma nova String.

Mas não pode alterar uma instância de uma String.

Portanto, replaceAll, como não pode modificar a String, tem de retornar uma nova String modificada do jeito que você precisa. [/quote]

Consegui entender, no caso tive que atribuir uma String replace2 = replace.replaceAll("traumatismo", "TESTEEEEEEEEEE");

Agradeço ajuda de todos.

HUAHUA Cara, era só copiar o código que postei na primeira vez e substituir pelo seu replaceAll. A sua solução funciona, mas você pode economizar umas linhas e tornar o código mais limpo.

private void replaceHtmls(int position){  
       String  replace = listaHtmls.get(position).replaceAll("traumatismo ", "TEXTO");  
       listaHtmls.add(position, replace);
   }  

//Ou em uma linha só
private void replaceHtmls(int position){    
       listaHtmls.add(position, listaHtmls.get(position).replaceAll("traumatismo ", "TEXTO"));  
   }  

Evite criar referências desnecessárias.

[quote=claudiosg]…

Consegui entender, no caso tive que atribuir uma String replace2 = replace.replaceAll("traumatismo", "TESTEEEEEEEEEE");

Agradeço ajuda de todos.[/quote]

vc não precisa criar outra string brother… (só se vc quiser guardar o valor antigo pra uso posterior…)

pois se vc fizer

replace = replace.replaceAll("traumatismo", "TESTEEEEEEEEEE");

ele ja vai alterar e jogar pra dentro dele mesmo :wink:

exato!