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.
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;
}
}
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.