Remoção de tags html em um loop

7 respostas
Priscilla_B_Pereira

Boa tarde,

Eu tenho uma String que contém um html e quero tirar as tags do texto. Sei que não posso usar a função de JEE e JSE que retira as tags porque não funciona em JME, que é a tecnologia que estou usando.
Bem, o erro que está retornando é este aqui: String index out of range: -118

StringBuffer texto = new StringBuffer(html.length());
int inicio ;
while ((inicio = html.indexOf("<")) >= 0) {                
         int fim = html.substring(inicio).indexOf(">");
          if (fim <= 0) {
              break;
          }
          int inicio2 = html.substring(fim).indexOf("<");
          if (inicio2 <= 0) {
              break;
          }
          if (inicio2 - fim != 1) {
             texto.append(html.substring(fim + 1, inicio2));
          }
            html = html.substring(fim);
}

A linha em que acredito que esteja acontecendo o erro é no último if, logo: if (inicio2 - fim != 1)
Então, se alguém puder me ajudar a resolver isto, obrigada!

7 Respostas

davidbuzatto

Parece que está funcionando certinho...

Dê uma olhada!

String teste = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">" +
    "<html>" +
        "<head>" +
            "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">" +
            "<title></title>" +
        "</head>" +
        "<body>" +
            "Lalala" +
        "</body>" +
    "</html>";

System.out.println( teste.replaceAll( "<[//?\s\p{Graph}&&[^<>]]*>", "" ) );

Acho que dá p/ melhorar a expressão regular <[//?a-zA-Z\\s\\p{Graph}&&[^<>]]*>
O que ela faz?

Obtem tudo que começa por < e termina com >
O conteúdo dentro dos sinais < e > é constituído por uma string que:
Tenha ou não a barra (//?)
Seja um espaço em braco (\\s)
Seja um simbolo gráfico, desde que não tenha < e > (\\p{Graph}&&[^<>])
E que tudo isso apareça 0 ou n vezes ([...]*).

[]´s

davidbuzatto

Faltou falar :smiley:

Ele troca tudo que ele encontrar seguindo o padrão que falei por nada ("").

Não sei se a class \p{Graph} só existe no Java ou se é suportada em outras linguagens também.

[]´s

Priscilla_B_Pereira

Então, eu não tenho a função “ReplaceAll” aqui no JME. Acho que terei que mexer manualmente com o loop… Mas ainda não sei como resolver.

davidbuzatto
String teste = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">" +
    "<html>" +
       "<head>" +
            "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">" +
            "<title></title>" +
        "</head>" +
        "<body>" +
            "Lal´ala" +
            "<!-- comentário -->" +
        "</body>" +
    "</html>";

char[] ca = teste.toCharArray();

StringBuffer sb = new StringBuffer();

for ( int i = 0; i < ca.length; i++ ) {

    if ( ca[ i ] == '<' )
        while ( ca[ i ] != '>' )
            i++;

    if ( ca[ i ] != '>' )
        sb.append( ca[ i ] );

}

System.out.println( sb.toString() );

E agora?

davidbuzatto

O problema é que se as tags não estiverem abertas e fechadas corretamente vai dar pau…
Outro problema pode ser o caracter < ou > dentro do texto… Esses caracteres teriam que estar codificados…

Priscilla_B_Pereira

Deu certo! Estou fazendo uma aplicação mobile que leia notícias e felizmente deu tudo certo! Obrigada por sua ajuda! :stuck_out_tongue:

davidbuzatto

Disponha.

Até mais!

[]´s

Criado 2 de janeiro de 2009
Ultima resposta 2 de jan. de 2009
Respostas 7
Participantes 2