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

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.