Estou utilizando esse codigo para achar padroes de numero de telefone dentro de uma string e retornar esse numero. O codigo funciona beleza se a string possui somente o numero mas se adiciono mais coisas a string o codigo pára de funcionar, como no exemplo abaixo. O que estou fazendo de errado?
public static void main (String args[]) throws Exception {
Collection<Pattern> padroesTelefone = new ArrayList<Pattern>();
padroesTelefone.add(Pattern.compile("^(\\(\\d{2,3}\\)|\\d{2,3})([-\\s]?\\d{4}){2}$"));
padroesTelefone.add(Pattern.compile("/\\(?\\d{3}\\)?\\d{3}-\\d{4}/"));
padroesTelefone.add(Pattern.compile("\\d{3}-\\d{3}-\\d{4}"));
padroesTelefone.add(Pattern.compile("\\(\\d{3}\\)\\s?\\d{3}-\\d{4}"));
padroesTelefone.add(Pattern.compile("^\\(?\\d{3}\\)?\\d{4}-\\d{4}$"));
padroesTelefone.add(Pattern.compile("^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$"));
padroesTelefone.add(Pattern.compile("^\\(?(\\d{3})\\)?[- ]?(\\d{4})[- ]?(\\d{4})$"));
padroesTelefone.add(Pattern.compile("^\\(?(\\d{2})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$"));
padroesTelefone.add(Pattern.compile("^\\(?(\\d{2})\\)?[- ]?(\\d{4})[- ]?(\\d{4})$"));
padroesTelefone.add(Pattern.compile("'/^(\\(?[0-9]{3}\\)?|[- ]? )[ ][0-9]{3}[-. ]?[0-9]{4}$/"));
padroesTelefone.add(Pattern.compile("'/^(\\(?[0-9]{2}\\)?|[- ]? )[ ][0-9]{3}[-. ]?[0-9]{4}$/"));
padroesTelefone.add(Pattern.compile("'/^(\\(?[0-9]{2}\\)?|[- ]? )[ ][0-9]{4}[-. ]?[0-9]{4}$/"));
padroesTelefone.add(Pattern.compile("'/^(\\(?[0-9]{3}\\)?|[- ]? )[ ][0-9]{4}[-. ]?[0-9]{4}$/"));
Matcher pesquisa;
String complemento = "Rua Praia de Jaguaribe quadra 12 lote 18 (71)3373-5059";
Iterator<Pattern> i = padroesTelefone.iterator();
while (i.hasNext()){
Pattern padrao = (Pattern)i.next();
pesquisa = padrao.matcher(complemento);
while (pesquisa.find()){
System.out.println(pesquisa.group());
}
}
}
}