Como extrair as tags de um documento HTML traduzido pelo BufferedReader?

2 respostas
PedroZM

Essa é uma questão de um trabalho de faculdade meu que está me deixando confuso. Eu tentei usar o método readLine(), mas ele me retorna uma linha inteira de texto em String, e eu só preciso da tag. Pensei em fazer um split no readLine usando o sinal “>” como parâmetro, mas isso danificaria a integridade da tag e também não funcionaria caso houvesse um “<>” dentro de algum elemento, como:

<h1 >Aqui cabe<>çalho do arquivo</h1>

O meu código está assim por enquanto:

public class LeitorHTML {
private BufferedReader leitor;
private ArrayList<String[]> aux;

public LeitorHTML(){
    aux = new ArrayList();
}

public void ler(String arquivo) throws FileNotFoundException, IOException{
    leitor = new BufferedReader(new FileReader(arquivo));
    
    //possível loop a partir desse ponto
    String linha = leitor.readLine();
    aux.add(0, linha.split(">"));
}

}

O meu objetivo é botar as tags em um ArrayList e contabilizá-las. Se Puderem, por favor me ajudem.

2 Respostas

JulioCesarSF

Usa o Jsoup (https://jsoup.org/ ) bem mais fácil do que ficar dando parse na mão.

Edit: Agora que vi é para faculdade…
Pode usar regex?

O que pode e não pode ser usado?

import java.io.BufferedReader;

import java.io.FileReader;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {

int count = 0;

try {

count = tags(pagina.html);

System.out.println("Encontrou ".concat(String.valueOf(count)));

} catch (Exception e) {

e.printStackTrace();

}

}

private static int tags(String arquivo) throws Exception {

int count = 0;
BufferedReader bR;
bR = new BufferedReader(new FileReader(arquivo));
  String linha = new String();
Pattern p = Pattern.compile("<([^\\s>/]+)");
while ((linha = bR.readLine()) != null) {
  	Matcher m = p.matcher(linha);
  	while (m.find()) {
  		count++;
  	}
  }
bR.close();
return count;

}

}

PedroZM

Acho que RegEx é viável sim. O que eu queria era por exemplo pegar aquela linha do h1 e botar só

"<h1>" e  "</h1>"

em um ArrayList de strings.

Criado 10 de maio de 2017
Ultima resposta 10 de mai. de 2017
Respostas 2
Participantes 2