Java: Eu tenho uma grande string de html e preciso extrair o texto href = “…”

Eu tenho essa string contendo um grande pedaço de html e estou tentando extrair o link da parte href = "..." da string. O href pode estar em uma das seguintes formas:

<a href="..." />
<a class="..." href="..." />

Eu realmente não tenho um problema com o regex, mas por algum motivo quando eu uso o seguinte código:

        String innerHTML = getHTML(); 
  Pattern p = Pattern.compile("href=\"(.*)\"", Pattern.DOTALL);
  Matcher m = p.matcher(innerHTML);
  if (m.find()) {
   // Get all groups for this match
   for (int i=0; i<=m.groupCount(); i++) {
    String groupStr = m.group(i);
    System.out.println(groupStr);

   }
  }

Alguém pode me dizer o que está errado com o meu código? Eu fiz essas coisas em php, mas em Java eu ​​estou de alguma forma fazendo algo errado ... O que está acontecendo é que ele imprime toda a string html sempre que eu tento imprimi-lo ...

EDIT: Só para que todos saibam que tipo de uma string eu estou lidando com:

<a class="Wrap" href="item.php?id=43241"><input type="button">
    <span class="chevron"></span>
  </a>
  <div class="menu"></div>

Toda vez que eu corro o código, ele imprime toda a string ... Esse é o problema ...

E sobre o uso de jTidy ... estou nisso, mas seria interessante saber o que deu errado nesse caso também ...

questionAnswers(7)

yourAnswerToTheQuestion