[Resolvido]Regex - String.matches(regex) e Pattern.compile

Quero validar nome próprio com os seguintes padrões:

  • 1ª letra maiúscula, seguido de 1 letra minúscula ou mais.

Fazendo esta validação com o método matches da String, esta perfeito, mas utilizando a classe Pattern não estou tendo êxito.
Realizei alguns testes e constatei que quando utilizo a classe Pattern com o método find da classe Matcher, esse método verifica se a regex determinada ocorre em qualquer posição.
Como faço para utilizar a classe Pattern para validações de expressões regulares?

[code]import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRE {

public static void main(String[] args) {
	
	String rE = "[A-Z]{1}[a-z]+";
	String nome = "marcioyukIo";// penultima letra maiuscula
	boolean b; 
	
	b = nome.matches(rE); //sera igual false  
	System.out.println(b);

// Utilizando classe Pattern

	Pattern p = Pattern.compile(rE);
	Matcher m = p.matcher(nome);
	b = m.find();
	System.out.println(b);	// sera igual true
}

}[/code]

Solução: alterar
b = m.find();
por
b = m.matches();

Olá Márcio, existe diferença entre o método find() e o matches () da classe Matcher. O método find procura por uma substring que siga o padrão , no nosso caso “marcioyokIo” segue pois note que “Io” no final possui a substring que passa no teste.
O método matches() da classe Matcher é parecido com o método matches() da classe String. ele testa se a string inteira segue o padrão .
No seu caso acho melhor usar o método matches () da classe Matcher e não o find() da mesma classe. Este último geralmente é usado em loop para busca de uma texto grande.
Mais informações sobre essas classes e métodos vc vê no docs oficial:
http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Obrigado.