[ajuda]Formatar String

16 respostas
Henrique_Fernandes

Boa noite galera eu to com o seguinte proleeminha e gostaria da ajuda de vcs. E o seguinte… eu recebo uma String formata em HTML e tenho q formatar ela da seguinte maneira, segue um exemplo:

String str = "<form name="form" method="post"><table><tr><td>Algum dado</td><td>Outro dado</td></tr><tr><td>Mais um dado</td><td>Mais um outro dado</td></tr></table></form>";

a minha String recebe todo esse valor… e nesse momento gostaria de formatar a String no programa para q ela ficasse desse jeito:

<form name="form" method="post">
     <table>
          <tr>
               <td>Algum dado</td>
               <td>Outro dado</td>
          </tr>
          <tr>
               <td>Mais um dado</td>
               <td>Mais um outro dado</td>
          </tr>
     </table>
</form>

Dessa forma eh q eu estou querendo mostrar ela apos ela ser formatada…(essa situação eh mostrada apos a execucao do problema), tentei bastante pessoal… bastante mesmo mas nao consegui… ainda sou iniciante em Java e por isso venho aki pedir a ajuda de vcs!!

eh isso aew… obrigado a todos q puderem e tb nao puderem me ajudar… valeu e boa noite!

16 Respostas

gqferreira

Você quer quebrar a String em linhas e identar ela?
oO Caramba… Isso é porque voce precisa mostrar esse resultado pro usuário? oO… Boa sorte. Fiquei curioso…

diogobr

Vai dar um pouco de trabalho, mas normal.

As tags usadas só serão essas ?

Pq é bom observar que cada tag html tem um tratamento.

No

vc finaliza ela na mesma linha.

Já com o

é diferente

Dê uma olhada na classe java.lang.String que ela que te ajudará.

Vlw
:smiley:

DavidUser
Levei cerca de 20 min mais enfim terminei:
public class FormatandoHTML {
    public static void main(String[]args){
        //str é a String que você recebe desorganizada.
        String str = "<form name=\"form\" method=\"post\"><table><tr><td>Algum dado</td><td>Outro dado</td></tr><tr><td>Mais um dado</td><td>Mais um outro dado</td></tr></table></form>";
        String imp= "Código Formatado: \t\tDavidKScorp.\n\n", parte;
        //leitura:

        for(int i=0;i<(str.split(">")).length;i++){
            if(tipo(str.split(">")[i]).equals("<form")){
                imp+=str.split(">")[i]+">\n";
            }
            else if(tipo(str.split(">")[i]).equals("</form")){
                imp+=str.split(">")[i]+">\n";
            }
            else if(tipo(str.split(">")[i]).equals("<table")){
                imp+="\t"+str.split(">")[i]+">\n";
            }
            else if(tipo(str.split(">")[i]).equals("</table")){
                imp+="\t"+str.split(">")[i]+">\n";
            }
            else if(tipo(str.split(">")[i]).equals("<tr")){
                imp+="\t\t"+str.split(">")[i]+">\n";
            }
            else if(tipo(str.split(">")[i]).equals("</tr")){
                imp+="\t\t"+str.split(">")[i]+">\n";
            }
            else if(tipo(str.split(">")[i]).equals("<td")){
                imp+="\t\t\t"+str.split(">")[i]+">";
            }
            else if(tipo(str.split(">")[i]).equals("</td")){
                imp+="\t\t\t"+str.split(">")[i]+">\n";
            }
            else{
                imp+=str.split(">")[i]+">\n";
            }
        }
        //imprime a String formatada:
        System.out.println(imp);
    }
    public static String tipo(String s){
        return s.split(" ")[0];
    }
}
Testa ai, mada aver... Qualquer erro me passa onde foi e eu faço a correção do bug.
DavidUser

vou resaltar que qualquer outro argumento que não seja ,

, ou deve ser adicionado ao código me passa os que quer q adicione e eu ajudo

ok?

DavidUser

mais acho q ja ta bem redondinho, so complica se o novo método tambem implemente formatação como

e
DavidUser

Esse ai vale uns 300 conto né!
kkkkkkkkkkkkkkkkkkkkkkkkkkkk
kkkkkkkkkkkkkkkkk
kkkkkkkkkkk
kkkkkkk
kkkk
kk
k

mais valeu o aprendizado

Henrique_Fernandes

valeuu galera vcs sao “feras” mesmo uheauheahuea…
mas eh isso aew…mas agora eu tenho q tornar ele o mais generico possivel pow… ou seja podem vir mais tags diferentes do q essas q eu passei como exemplo e eu tenho q trata-las sempre … mas eh isso ai… agradeço a todos q me ajudaram!!

Henrique_Fernandes

alguem q saiba resolver isso usando StringBuffer ?

agradeço a ajuda de vcs!

T

Se o seu HTML é na verdade um XHTML (ou seja, um HTML cujos tags estão todos bem-formados, e pode ser lido como um XML), você pode até ler o tal trecho como um XML DOM Document, e então indentar o XML de volta.

É que nem sempre o HTML está bem-formado.

DavidUser

ai tp, so tem de adicionar as formatações das tags novas, mas se a tag não segue formatação como um funciona normal sacou;
testa ai
oq vier de novo vc insere… não existem programas genéricos que resolvam bem esta função.

“Cara não adianta tentar, não existe um modo para formatar as tags, se você não insere a formatação de cada tag!”

Teste, quando algo de novo aparece para o programa, de suporte… 1.1, 1.2, 1.3; até ele atender completamente os requisitos.

DavidUser

Me passa a lista das tags e a formatação q quer e eu termino.
Lembrando:
o programa vê <td […]> igual a

.
O
public class XMLUtil {
   public static Document stringToDom(String xmlSource) throws SAXException, ParserConfigurationException,
         IOException {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      return builder.parse(new InputSource(new StringReader(xmlSource)));
   }

   public static String format(String xmlSource) throws IOException, ParserConfigurationException, SAXException {
      Document document = stringToDom(xmlSource);
      OutputFormat of = new OutputFormat();
      of.setIndent(2);
      of.setOmitXMLDeclaration(true);

      Writer writer = new StringWriter();
      XMLSerializer serializer = new XMLSerializer(writer, of);
      serializer.serialize(document);

      return writer.toString();
   }

   public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException {
      String series = "<form name=\"form\" method=\"post\"><table><tr><td>Algum dado</td><td>Outro dado</td>"
            + "</tr><tr><td>Mais um dado</td><td>Mais um outro dado</td></tr></table></form>";
      String result = XMLUtil.format(series);
      System.out.print(result);
   }
}
Dá pra deixar bem mais customizável.
Henrique_Fernandes

Eu realmente agradeço a todos por essa ajuda!!

muitissimo obg e valeu!!

Henrique_Fernandes
public class Identacao {

    public String identar(String codigo){

        StringBuffer buffer = new StringBuffer();
        char c = '[code]
public class Identacao {

    public String identar(String codigo){

        StringBuffer buffer = new StringBuffer();
        char c = '\0';

        for (int i = 0; i < codigo.length(); i++){
            c = codigo.charAt(i);
            buffer.append(c);
            if (c == '>'){
                buffer.append("\n" + "         ");
                System.out.println("entrou");
            }
            if(c == '<'){

                buffer.trimToSize();
            }
            
        }


        return buffer.toString();
    }
    
    private String backTag(){
        
        
    }
    


    public static void main(String[] args) {

        String str = "<form name='form' method='post'><table id='></table></form>";
        Identacao ident = new Identacao();

        System.out.println(ident.identar(str));

    }
';

for (int i = 0; i < codigo.length(); i++){
c = codigo.charAt(i);
buffer.append(c);
if (c == '>'){
buffer.append("\n" + " ");
System.out.println("entrou");
}
if(c == '<'){

buffer.trimToSize();
}

}

return buffer.toString();
}

private String backTag(){


}

public static void main(String[] args) {

String str = "

for (; i < aux.length(); i++) {
c = aux.charAt(i);
buffer.append(c);
if (c == '>') {
cont++;
if (cont >= 0) {
buffer.append("\n" + insereEspaco(cont * 3));
}
} else if (c == '/' && aux.charAt(i - 1) == '<') {
for (; i < aux.length(); i++) {
c = aux.charAt(i);
buffer.append(c);
if (c == '>') {
cont--;
if (cont >= 0) {
buffer.append("\n" + removeEspaco(cont * 3));
break;
}

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

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

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

public static void main(String[] args) {

String str = "meu form

essa tableuma tr
uma td
";
TesteIdentecao ti = new TesteIdentecao();
System.out.println(ti.identacao(str));
}
}
[/code]

Criado 18 de junho de 2009
Ultima resposta 22 de jun. de 2009
Respostas 16
Participantes 7