Java: tengo una gran cadena de html y necesito extraer el texto href = "..."

Tengo esta cadena que contiene una gran parte de html y estoy tratando de extraer el enlace de href = "..." parte de la cadena. El href podría estar en una de las siguientes formas:

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

Realmente no tengo problemas con las expresiones regulares, pero por alguna razón cuando uso el siguiente 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);

   }
  }

¿Alguien puede decirme qué está mal con mi código? Hice estas cosas en PHP pero en Java estoy haciendo algo mal ... Lo que está sucediendo es que imprime toda la cadena html cada vez que intento imprimirla ...

EDIT: para que todos sepan con qué tipo de cadena estoy tratando:

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

Cada vez que ejecuto el código, se imprime toda la cadena ... Ese es el problema ...

Y sobre el uso de jTidy ... Estoy en ello pero sería interesante saber qué salió mal en este caso también ...

Respuestas a la pregunta(7)

Su respuesta a la pregunta