[Ajuda]Identacao do codigo HTML

2 respostas
Henrique_Fernandes
Boa tarde pessoa, mais uma vez gostaria de pedir a ajuda de vcs. O problema eh o seguinte, recebo um codigo em html e armazeno em uma String, até ai tudo certo, mas na hora de eu identar esse codigo, no fim dele ocorre uma situaçao indesejada. Vou mostrar oq acontece.
public class TesteIndentation {

    private int i = 0;
    private StringBuffer buffer = new StringBuffer();

    public String ident(String codigo) {

        char c = '[code]
public class TesteIndentation {

    private int i = 0;
    private StringBuffer buffer = new StringBuffer();

    public String ident(String codigo) {

        char c = '\0';
        int cont = 0;
        StringBuffer aux = new StringBuffer(codigo);

        for (; i < aux.length(); i++) {
            c = aux.charAt(i);
            buffer.append(c);
            if (c == '>') {
                cont++;
                if (cont >= 0) {
                    buffer.append("\n" + insereOuRemoveEspaco(cont * 3));
                }
            } else if (c == '/' && aux.charAt(i - 1) == '<') {
                ++i; //coloquei essa inst. para o char '/' nao repetir
                for (; i < aux.length(); i++) {
                    c = aux.charAt(i);
                    buffer.append(c);
                    if (c == '>') {
                        cont--;
                        if (cont >= 0) {
                            buffer.append("\n" + insereOuRemoveEspaco(cont * 3));
                            break;
                        }

                    }
                }
            }
        }
        return buffer.toString();
    }

    private String insereOuRemoveEspaco(int num) {
        StringBuffer branco = new StringBuffer();
        for (int j = 0; j < num; j++) {
            branco.append(" ");
        }
        return branco.toString();
    }

    public static void main(String[] args) {

        TesteIndentation ti = new TesteIndentation();

        //esse é um exemplo de codigo html que usei para meus testes.
        String str = "<form name='form' method='post'><table id='meuId'><tr><td></td></tr></table></form>";
        System.out.println(ti.ident(str));

    }
}
'; int cont = 0; StringBuffer aux = new StringBuffer(codigo);

for (; i < aux.length(); i++) {
c = aux.charAt(i);
buffer.append(c);
if (c == '>') {
cont++;
if (cont >= 0) {
buffer.append("\n" + insereOuRemoveEspaco(cont * 3));
}
} else if (c == '/' && aux.charAt(i - 1) == '<') {
++i; //coloquei essa inst. para o char '/' nao repetir
for (; i < aux.length(); i++) {
c = aux.charAt(i);
buffer.append(c);
if (c == '>') {
cont--;
if (cont >= 0) {
buffer.append("\n" + insereOuRemoveEspaco(cont * 3));
break;
}

}
}
}
}
return buffer.toString();
}

private String insereOuRemoveEspaco(int num) {
StringBuffer branco = new StringBuffer();
for (int j = 0; j < num; j++) {
branco.append(" ");
}
return branco.toString();
}

public static void main(String[] args) {

TesteIndentation ti = new TesteIndentation();

//esse é um exemplo de codigo html que usei para meus testes.
String str = "

";
System.out.println(ti.ident(str));

}
}
[/code]

resultado:
<form name='form' method='post'>
   <table id='meuId'>
      <tr>
         <td>
            </td>  //essa tag nao alinhoou com a outra <td>
         </tr>
      </table>
   </form>

o meu problema é justamente, que quando o programa encontra a primeira tag de fechamento, ele nao recua os espaços, ele adianta os espaços, e nao eh isso que eu to querendo que aconteça, nao entendi pq ele nao recuou e com isso as outras tags tambem ficaram desalinhadas. Entao gostaria da ajuda de vcs mais uma vez para resolver esse problema.

Mais uma vez agradeço a todos que puderem me ajudar.

[]'s

2 Respostas

Henrique_Fernandes

Ninguem?? :frowning:

O

A classe que postei não serviu pra você? http://www.guj.com.br/posts/list/130063.java#700929

Criado 25 de junho de 2009
Ultima resposta 26 de jun. de 2009
Respostas 2
Participantes 2