[Resolvido] Problema com String replaceAll

12 respostas
C

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>

12 Respostas

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

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

C

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

erico_kl
E

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.

darkan666

tenta como o ErickRAR disse …

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

se não rolar tenta o:

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

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

C

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.

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

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.

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

Agradeço ajuda de todos.

ErickRAR

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.

darkan666

claudiosg:

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

Agradeço ajuda de todos.

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:

darkan666

exato!

Criado 20 de agosto de 2012
Ultima resposta 20 de ago. de 2012
Respostas 12
Participantes 7