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.