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

2 respostas
M

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?

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
	}
}

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

2 Respostas

A

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

M

Obrigado.

Criado 9 de março de 2014
Ultima resposta 9 de mar. de 2014
Respostas 2
Participantes 2