Retirar texto de uma String

7 respostas
F

Bom dia,
Tenho uma string (seu conteúdo é um html), e preciso retirar 4 partes desta, adicionando em um Array.
Tentei usar um arquivo lendo linha a linha, e retirando o texto delimitado por palavras chaves. mas não deu certo porque ao criar um arquivo toda string vira uma única linha.

Não queria percorrer caracter a caracter, alguém sabe como posso proceder?

public static void main(String[] args) {
		// TODO Auto-generated method stub
		String corpoHtml =" [produto_ini]" +
		 "<table class=\"ftr\">" +
  	     "<tr><td class=\"ftT\">bla</tr>" +
    	 "[com_ini]" +
    	 "<tr><td class=\"ftD\">bla<td></tr>" +
       	 "[res_ini]" +
       	 "<tr><td class=\"ftC\">bla</td></tr>" +
       	 "[pro_fim]" +
       	 "</table>" +
       	 "<br/>";
		BufferedReader br = null; 
		String linha ="";
     	ArrayList result = null;
     	String inicio = "";
        String fim = "";
        String conteudo = null;
        
        
		 try {  

			 

			 FileWriter writer = new FileWriter(new File("saida.txt"));
		 	 PrintWriter saida = new PrintWriter(writer);
		 	 saida.print(corpoHtml);
		 	 saida.close();
		 	 writer.close();
		 	 FileReader reader = new FileReader(new File("saida.txt"));
		 	 br = new BufferedReader(reader); 
             while ((linha=br.readLine())!= null) {  
                 linha=br.readLine();                 
                 if(linha.equals( "[produto_ini]")){                	 
                	 linha=br.readLine();
                	 inicio = conteudo;
                	 conteudo = "";
                 }else if(linha.equals("[com_ini]")){
                	 linha=br.readLine();
                	 inicio = conteudo;
                	 conteudo = "";
                 }else if(linha.equals("[res_ini]")){
                	 linha=br.readLine();
                	 inicio = conteudo;
                	 conteudo = "";
                 }else if(linha.equals("[pro_fim]")){
                	 linha=br.readLine();
                	 inicio = conteudo;
                	 conteudo = "";
                 }else{
                	 conteudo += linha;
                 }
             }  
         } catch (IOException ex) {  
             ex.printStackTrace();  
         }
		
	}

obs: percorri linha a linha e a cada palavra chave ia guardando o conteudo da string na variavel conteudo

obrigado

7 Respostas

D

você já tentou usar um .split ???

R

Uma opção seria usar um parser html.
Nesse link tem alguns: http://java-source.net/open-source/html-parsers

F

rlazoti,
estou verificando o funcionamento pois não conheço a ferramenta.

dxos,
Split vai funcionar mas preciso fazer outras coisas. Isso porque não vou utlizizar apenas um caracter. Estarei usando diferentes chaves para retirar trechos da string, entende?

Valeu muito pelas dicas… estou trabalhando nisso e posto qd terminar…

D

find_ejb:
rlazoti,
Valeu muito pelas dicas… estou trabalhando nisso e posto qd terminar…

consiguiu algo que atenda varios caracteres separadores como vc comentou ?

F

Por enquanto isso aee (devo usar assim):

public static void main(String[] args) {
		// TODO Auto-generated method stub
		List textos = new ArrayList<String>();
		String corpoHtml ="<table class=\"ftR\">"+
 	     "<tr><td class=\"ftT\">[xxx]</td></tr>"+
   	     "[combinacao_ini]" +
   	     "<tr><td class=\"ftData\">[yyy]</td></tr>" +
      	 "[resultado_ini]" +
      	 "<tr><td class=\"ftC\">[zzz]</td></tr>" +
      	 "[produto_fim]" +
      	 "</table>" +
      	 "<br/>";
		
		int combinacao_ini = 16;
		int resultado_ini = 15;
		int produto_fim = 13;
		int combinacao_iniTot = 0;
		int resultado_iniTot = 0;
		int produto_fimTot = 0;
		
		combinacao_iniTot = corpoHtml.split("\\[combinacao_ini\\]")[0].length();
		resultado_iniTot = corpoHtml.split("\\[resultado_ini\\]")[0].length();
		produto_fimTot = corpoHtml.split("\\[produto_fim\\]")[0].length();

		textos.add(corpoHtml.substring(0, combinacao_iniTot));
		textos.add(corpoHtml.substring(combinacao_iniTot + combinacao_ini, resultado_iniTot));
		textos.add(corpoHtml.substring(resultado_iniTot + resultado_ini, produto_fimTot));
		textos.add(corpoHtml.substring(produto_fimTot + produto_fim));
		
		System.out.println("size "+textos.get(0)+textos.get(1)+textos.get(2)+textos.get(3));
	}

Obtive 4 partes desta String sacou?
Vou tentar refinar mais.

D

find_ejb:
Por enquanto isso aee (devo usar assim):
Obtive 4 partes desta String sacou?
Vou tentar refinar mais.

Uma pergunta: porque vc esta tratando um HTML? vc vai receber trecho dela via alguma coisa?

F

Tenho um gerenciador(app 2) de conteúdo de uma aplicação(app1).
Uma pessoa vai editar o html de email que são enviados a clientes, por esse gerenciador.

Essas chaves do html são pontos de iteração quando se monta o email entendeu? por isso dividir o html para poder iterar e montar o corpo do email.

[]

Criado 6 de agosto de 2010
Ultima resposta 9 de ago. de 2010
Respostas 7
Participantes 3