Introdução
Neste laboratório, você aprenderá como verificar se uma string corresponde a uma expressão regular em Java. Começaremos entendendo os fundamentos das expressões regulares e como criar um padrão simples usando o pacote java.util.regex.
Em seguida, você explorará as classes Pattern e Matcher para realizar operações de correspondência. Por fim, você aplicará seu conhecimento para testar padrões de regex com a entrada do usuário, ganhando experiência prática no uso de expressões regulares para validação e manipulação de strings em Java.
Criar um Padrão Regex Básico
Nesta etapa, começaremos entendendo o que são expressões regulares (regex) e como criar um padrão básico em Java.
Expressões regulares são ferramentas poderosas usadas para corresponder e manipular strings de texto. Pense nelas como uma mini-linguagem para descrever padrões em texto. Elas são incrivelmente úteis para tarefas como pesquisar texto específico, validar formatos de entrada (como endereços de e-mail ou números de telefone) e substituir texto com base em padrões.
Em Java, as expressões regulares são tratadas pelo pacote java.util.regex. As duas classes principais que usaremos são Pattern e Matcher.
Pattern: Esta classe representa uma expressão regular compilada. Você compila uma string regex em um objetoPattern.Matcher: Esta classe é usada para realizar operações de correspondência em uma string de entrada, interpretando umPattern.
Vamos criar um programa Java simples para definir e imprimir um padrão regex básico.
Abra o arquivo
HelloJava.javano editor WebIDE, caso ele ainda não esteja aberto.Substitua todo o conteúdo do arquivo pelo seguinte código:
import java.util.regex.Pattern; public class HelloJava { public static void main(String[] args) { // Define a simple regex pattern to match the word "Java" String regexPattern = "Java"; // Compile the regex pattern Pattern pattern = Pattern.compile(regexPattern); // Print the pattern System.out.println("Our regex pattern is: " + pattern.pattern()); } }Vamos analisar as novas partes:
import java.util.regex.Pattern;: Esta linha importa a classePattern, que precisamos para trabalhar com regex.String regexPattern = "Java";: Esta linha define uma variável de string simplesregexPatternque contém nossa expressão regular. Neste caso, o padrão é apenas a palavra literal "Java".Pattern pattern = Pattern.compile(regexPattern);: É aqui que compilamos nossa string regex em um objetoPattern. O métodoPattern.compile()recebe a string regex como argumento e retorna um objetoPattern.System.out.println("Our regex pattern is: " + pattern.pattern());: Esta linha imprime a string regex original que foi usada para criar o objetoPattern. O métodopattern()do objetoPatternretorna a string regex.
Salve o arquivo (Ctrl+S ou Cmd+S).
Agora, vamos compilar nosso programa. Abra o Terminal na parte inferior do WebIDE e certifique-se de estar no diretório
~/project. Execute o seguinte comando:javac HelloJava.javaSe não houver erros, um arquivo
HelloJava.classserá criado no diretório~/project.Finalmente, execute o programa compilado:
java HelloJavaVocê deve ver a seguinte saída:
Our regex pattern is: JavaIsso confirma que nosso padrão regex básico foi definido e compilado com sucesso. Na próxima etapa, usaremos este padrão para encontrar correspondências em uma determinada string.
Usar as Classes Pattern e Matcher
Nesta etapa, aprenderemos como usar a classe Matcher com nosso Pattern para encontrar ocorrências do padrão dentro de uma determinada string de entrada.
Como discutimos na etapa anterior, a classe Pattern representa a expressão regular compilada. A classe Matcher é o que usamos para realmente realizar as operações de pesquisa em uma string de entrada específica usando esse padrão compilado.
Aqui está como o processo geralmente funciona:
- Compilar a regex: Crie um objeto
Patterna partir de sua string regex usandoPattern.compile(). - Criar um Matcher: Obtenha um objeto
Matcherchamando o métodomatcher()no objetoPattern, passando a string de entrada que você deseja pesquisar. - Realizar a correspondência: Use os métodos do objeto
Matcherpara encontrar correspondências. Os métodos comuns incluemfind()(para encontrar a próxima correspondência) ematches()(para verificar se toda a string de entrada corresponde ao padrão).
Vamos modificar nosso programa HelloJava.java para usar um Matcher para encontrar a palavra "Java" em uma frase de exemplo.
Abra o arquivo
HelloJava.javano editor WebIDE.Substitua o código existente pelo seguinte:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class HelloJava { public static void main(String[] args) { // Define a simple regex pattern to match the word "Java" String regexPattern = "Java"; // The input string to search within String inputString = "Hello, Java! Welcome to Java programming."; // Compile the regex pattern Pattern pattern = Pattern.compile(regexPattern); // Create a Matcher object Matcher matcher = pattern.matcher(inputString); // Find and print the matches System.out.println("Searching for pattern: '" + regexPattern + "' in string: '" + inputString + "'"); while (matcher.find()) { System.out.println("Found match at index: " + matcher.start()); } } }Aqui está o que é novo:
import java.util.regex.Matcher;: Importamos a classeMatcher.String inputString = "Hello, Java! Welcome to Java programming.";: Definimos a string que queremos pesquisar.Matcher matcher = pattern.matcher(inputString);: Criamos um objetoMatcherchamando o métodomatcher()em nosso objetopatterne passando oinputString.while (matcher.find()) { ... }: Este loop usa o métodofind()doMatcher. O métodofind()tenta encontrar a próxima subsequência da sequência de entrada que corresponde ao padrão. Ele retornatruese uma correspondência for encontrada efalsecaso contrário. O loopwhilecontinua enquantofind()retornatrue.System.out.println("Found match at index: " + matcher.start());: Dentro do loop, se uma correspondência for encontrada,matcher.start()retorna o índice inicial da subsequência correspondente na string de entrada. Imprimimos este índice.
Salve o arquivo (Ctrl+S ou Cmd+S).
Compile o programa modificado no Terminal:
javac HelloJava.javaExecute o programa compilado:
java HelloJavaVocê deve ver uma saída semelhante a esta:
Searching for pattern: 'Java' in string: 'Hello, Java! Welcome to Java programming.' Found match at index: 7 Found match at index: 27Esta saída mostra que nosso programa encontrou com sucesso duas ocorrências da palavra "Java" na string de entrada e imprimiu o índice inicial de cada correspondência.
Você agora usou com sucesso as classes Pattern e Matcher para encontrar um padrão específico dentro de uma string. Na próxima etapa, tornaremos este programa interativo, permitindo que o usuário insira a string a ser pesquisada.
Testar Regex com Entrada do Usuário
Nesta etapa final, tornaremos nosso programa regex interativo, permitindo que o usuário insira a string que deseja pesquisar. Isso tornará o programa mais flexível e demonstrará como combinar regex com a interação do usuário.
Usaremos a classe Scanner, da qual você pode se lembrar do "Seu Primeiro Lab Java", para ler a entrada do usuário.
Abra o arquivo
HelloJava.javano editor WebIDE.Substitua o código existente pelo seguinte:
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HelloJava { public static void main(String[] args) { // Define a simple regex pattern to match the word "Java" String regexPattern = "Java"; // Create a Scanner object to read user input Scanner scanner = new Scanner(System.in); // Prompt the user to enter a string System.out.print("Enter the string to search within: "); String inputString = scanner.nextLine(); // Compile the regex pattern Pattern pattern = Pattern.compile(regexPattern); // Create a Matcher object Matcher matcher = pattern.matcher(inputString); // Find and print the matches System.out.println("Searching for pattern: '" + regexPattern + "' in string: '" + inputString + "'"); boolean found = false; while (matcher.find()) { System.out.println("Found match at index: " + matcher.start()); found = true; } if (!found) { System.out.println("No match found."); } // Close the scanner scanner.close(); } }Aqui estão as alterações que fizemos:
import java.util.Scanner;: Importamos a classeScanner.Scanner scanner = new Scanner(System.in);: Criamos um objetoScannerpara ler a entrada do console.System.out.print("Enter the string to search within: ");: Solicitamos que o usuário insira a string.String inputString = scanner.nextLine();: Lemos a linha inteira de entrada do usuário e a armazenamos na variávelinputString.- Adicionamos uma variável
boolean found = false;e um blocoif (!found)para imprimir uma mensagem se nenhuma correspondência for encontrada. scanner.close();: Fechamos oScannerpara liberar recursos do sistema.
Salve o arquivo (Ctrl+S ou Cmd+S).
Compile o programa no Terminal:
javac HelloJava.javaExecute o programa:
java HelloJavaO programa agora esperará que você insira uma string. Digite uma string que contenha a palavra "Java" (ou não) e pressione Enter.
Por exemplo, se você inserir:
Learning Java is fun!A saída será:
Enter the string to search within: Learning Java is fun! Searching for pattern: 'Java' in string: 'Learning Java is fun!' Found match at index: 9Se você inserir:
Python is also great.A saída será:
Enter the string to search within: Python is also great. Searching for pattern: 'Java' in string: 'Python is also great.' No match found.
Você agora criou com sucesso um programa Java interativo que usa expressões regulares para pesquisar um padrão em uma string fornecida pelo usuário. Este é um exemplo prático de como regex pode ser usado em aplicações do mundo real.
Resumo
Neste laboratório, começamos entendendo os fundamentos das expressões regulares (regex) em Java, com foco no pacote java.util.regex. Aprendemos que regex é uma ferramenta poderosa para correspondência e manipulação de padrões em strings, e que as classes-chave são Pattern e Matcher. Em seguida, praticamos a criação de um padrão regex básico, definindo uma string simples e compilando-a em um objeto Pattern usando Pattern.compile(), demonstrando como definir e imprimir um padrão regex básico em um programa Java.



