pessoal olha so,esta acontecendo algo muito estranho no metodo matches,eu leio um arquivo texto,ate ai blz,a expressão regular esta certa,mesmo assim me retorna false e nao sei pq?
//vals[2].substring(0,2) me retorna "RO",a expressao regular esta certa e mesmo assim me retorna falsevals[2].substring(0,2).matches("[A-Z]");
Talvez eu esteja enganado em algum detalhe, mas o que ocorre é o seguinte:
O método “matches” verifica se a Expressão Regular casa perfeitamente com sua palavra. Se combinar com uma parte dela apenas, não importa, retorna falso.
Assim:
Sua palavra é RO.
A ER é “[A-Z]”, ou seja, UM caracter de A a Z.
Não importa se “UM caracter de A a Z” pode ser encontrado dentro da palavra RO. Interessa é se a palavra inteira combina com a máscara, sem sobrar nem faltar.
Você tem duas alternativas para que a comparação funcione:
mudar a expressão para “[A-Z][A-Z]” (dois caracteres). Essa máscara combina com a palavra RO.
ou
Usar o método find() da classe Matcher para ver se uma correspondência pode ser encontrada em qualquer lugar da palavra.
java.util.regex.Pattern p = java.util.regex.Pattern.compile("[A-Z]");
java.util.regex.Matcher m = p.matcher("RO");
System.out.println(m.matches()); // Essa mostra FALSE - A correspondencia não é exata.
System.out.println(m.find()); // Aqui mostra TRUE - A expressão existe em parte da palavra
dicabeca
gomesrod obrigado ai pela ajuda,mais minha expressao nao esta de todo jeito certo,como vc mesmo disse ele so pega UM LETRA,entao minha solucao foi vals[2].substring(0,2).matches("[A-Z]+");
gomesrod
Como diria o Chapolin… “é exatamente o que eu ia dizer”