Bom, estarei falando sobre um recurso muito interessante implementado também na linguagem Java, chamado de Regex. Para muitos este nome pode até causar arrepios, mas é bem legal e interessante sua função, podendo ser usado para buscas, validação, etc. Em seguida, estarei discutindo um pouco sobre tokenização, usando o método split() da classe java.lang.String. Então vamos ao que interessa, ao Regex.

Bom, as expressões regulares (regex), é um recurso onde podemos ta fazendo busca com apenas simples caracteres (sequência de letras, dígitos, etc) ou com metacaracteres. Logo, para utilizarmos tais vantagens precisamos obviamente, indicar uma fonte e os caracteres de buscas. Como faremos isso? Simples, a API Java fornece duas classes especificas para tal tarefa, no pacote java.util.regex, sendo elas: java.util.regex.Pattern e java.util.regex.Matcher. Então, vamos ao nosso primeiro exemplo.

De Matcher estaremos estudando os métodos: find(), start(), group(), end();

Temos como fonte: mouse da cor azul. Logo, quero encontrar onde estar a palavra cor, na nossa frase(em negrito). E agora!?


 import java.util.regex.Matcher; 
 import java.util.regex.Pattern; 

 public class Regex { 

 public static void main(String[] args) { 

 String fonte = “mouse da cor azul”; 

 String queremosIsso = “cor”; 

 /*
  * Nesse momento obteremos uma instância de Pattern, através do * método 
 * static compile(String regex), o qual recebe uma String que é a 
 * expressção regular 
 */ 
 Pattern p = Pattern.compile(queremosIsso); 

 /* 
 * Aqui, através da instancia de Pattern, chamando o método * matcher() e passando a fonte de busca 
 */ 

 Matcher m = p.matcher(fonte); 

 //Ligando o motor 
 while (m.find()) { 

 //Obtendo o inicio do que foi encontrado 
 System.out.println(m.start()); 

 } 

 } 

 }

Ao executarmos este código, obteremos como resposta 9 (nove). Mas, por que 9? Primeiro vamos ver o que acontece.

Após termos obtidos as instancias de Pattern e Matcher, em um loop (while) chamamos o método m.find(). Ao chamarmos este cara, o motor regex é disparado, ou seja, a tarefa de busca é efetivamente iniciada. Vale lembra que o motor regex, executa a busca da esquerda para a direita e ao passo que ele encontrar uma ocorrência, está não participara mais do processo de busca. Logo abaixo no código, chamei o método m.start(). Esse método retorna um inteiro, onde este representa, o índice inicial de cada sequencia encontrada, que neste caso seria 9 (nove). Lembrado que começa do zero. Abaixo segue as letras e seus índices (onde estiver duas aspas sem conteúdo, representam espaços).


0-m   1-o   2-u   3-s   4-e    5-’ ‘   6-d   7-a   8-’ ‘   9-c 

mouse da cor azul. Existe também como falei no início, o método group(). Este é responsável por trazer o grupo de caracteres que foi encontrado na busca.


//Ligando o motor 

 while (m.find()) { 

 //Obtendo o inicio do que foi encontrado 

 System.out.println(m.start() +” “+ m.group() +” “+ m.end()); 

 }

Terá como saída: 9 cor 12. Em seguida o método end(), onde este é a contra partida de start( ), trazendo o índice do ultimo caracter encontrado, porém esse o índice inicia no um (1), bem simples neh isso.