如何在 Java 中检查字符串是否匹配正则表达式

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何在 Java 中检查字符串是否与正则表达式匹配。我们将从理解正则表达式的基础知识开始,以及如何使用 java.util.regex 包创建一个简单的模式。

然后,你将探索 PatternMatcher 类来执行匹配操作。最后,你将运用所学知识,使用用户输入测试正则表达式模式,从而获得在 Java 中使用正则表达式进行字符串验证和操作的实践经验。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/StringManipulationGroup -.-> java/strings("Strings") java/StringManipulationGroup -.-> java/regex("RegEx") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/user_input("User Input") subgraph Lab Skills java/strings -.-> lab-559992{{"如何在 Java 中检查字符串是否匹配正则表达式"}} java/regex -.-> lab-559992{{"如何在 Java 中检查字符串是否匹配正则表达式"}} java/user_input -.-> lab-559992{{"如何在 Java 中检查字符串是否匹配正则表达式"}} end

创建基本的正则表达式模式

在这一步中,我们将首先了解什么是正则表达式(regex),以及如何在 Java 中创建一个基本的模式。

正则表达式是用于匹配和处理文本字符串的强大工具。可以将它们视为一种用于描述文本模式的小型语言。它们在诸如搜索特定文本、验证输入格式(如电子邮件地址或电话号码)以及根据模式替换文本等任务中非常有用。

在 Java 中,正则表达式由 java.util.regex 包处理。我们将使用的两个主要类是 PatternMatcher

  • Pattern:这个类表示一个编译后的正则表达式。你可以将一个正则表达式字符串编译成一个 Pattern 对象。
  • Matcher:这个类用于通过解释 Pattern 对输入字符串执行匹配操作。

让我们创建一个简单的 Java 程序来定义并打印一个基本的正则表达式模式。

  1. 如果 HelloJava.java 文件尚未在 WebIDE 编辑器中打开,请打开它。

  2. 将文件的全部内容替换为以下代码:

    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());
        }
    }

    让我们看看新添加的部分:

    • import java.util.regex.Pattern;:这行代码导入了 Pattern 类,我们需要使用这个类来处理正则表达式。
    • String regexPattern = "Java";:这行代码定义了一个简单的字符串变量 regexPattern,它包含我们的正则表达式。在这种情况下,模式只是字面意义上的单词 "Java"。
    • Pattern pattern = Pattern.compile(regexPattern);:在这里,我们将正则表达式字符串编译成一个 Pattern 对象。Pattern.compile() 方法接受正则表达式字符串作为参数,并返回一个 Pattern 对象。
    • System.out.println("Our regex pattern is: " + pattern.pattern());:这行代码打印用于创建 Pattern 对象的原始正则表达式字符串。Pattern 对象的 pattern() 方法返回该正则表达式字符串。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 现在,让我们编译我们的程序。打开 WebIDE 底部的终端,并确保你位于 ~/project 目录中。运行以下命令:

    javac HelloJava.java

    如果没有错误,~/project 目录中将创建一个 HelloJava.class 文件。

  5. 最后,运行编译后的程序:

    java HelloJava

    你应该会看到以下输出:

    Our regex pattern is: Java

    这证实了我们的基本正则表达式模式已成功定义并编译。在下一步中,我们将使用这个模式在给定的字符串中查找匹配项。

使用 Pattern 和 Matcher 类

在这一步中,你将学习如何将 Matcher 类与 Pattern 结合使用,以在给定的输入字符串中查找模式的出现位置。

正如上一步所讨论的,Pattern 类表示编译后的正则表达式。而 Matcher 类则用于使用该编译后的模式在特定的输入字符串上实际执行搜索操作。

以下是该过程的一般工作方式:

  1. 编译正则表达式:使用 Pattern.compile() 方法从正则表达式字符串创建一个 Pattern 对象。
  2. 创建 Matcher 对象:通过在 Pattern 对象上调用 matcher() 方法,并传入要搜索的输入字符串,来获取一个 Matcher 对象。
  3. 执行匹配操作:使用 Matcher 对象的方法来查找匹配项。常用的方法包括 find()(用于查找下一个匹配项)和 matches()(用于检查整个输入字符串是否与模式匹配)。

让我们修改 HelloJava.java 程序,使用 Matcher 在一个示例句子中查找单词 "Java"。

  1. 在 WebIDE 编辑器中打开 HelloJava.java 文件。

  2. 将现有代码替换为以下代码:

    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());
            }
        }
    }

    以下是新增的部分:

    • import java.util.regex.Matcher;:导入 Matcher 类。
    • String inputString = "Hello, Java! Welcome to Java programming.";:定义要搜索的字符串。
    • Matcher matcher = pattern.matcher(inputString);:通过在 pattern 对象上调用 matcher() 方法并传入 inputString 来创建一个 Matcher 对象。
    • while (matcher.find()) { ... }:这个循环使用 Matcherfind() 方法。find() 方法尝试查找输入序列中与模式匹配的下一个子序列。如果找到匹配项,则返回 true,否则返回 false。只要 find() 返回 truewhile 循环就会继续执行。
    • System.out.println("Found match at index: " + matcher.start());:在循环内部,如果找到匹配项,matcher.start() 会返回匹配子序列在输入字符串中的起始索引。我们将打印这个索引。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 在终端中编译修改后的程序:

    javac HelloJava.java
  5. 运行编译后的程序:

    java HelloJava

    你应该会看到类似以下的输出:

    Searching for pattern: 'Java' in string: 'Hello, Java! Welcome to Java programming.'
    Found match at index: 7
    Found match at index: 27

    这个输出表明,程序成功地在输入字符串中找到了单词 "Java" 的两次出现,并打印了每个匹配项的起始索引。

你现在已经成功地使用 PatternMatcher 类在字符串中查找特定模式。在下一步中,我们将让程序变得交互式,允许用户输入要搜索的字符串。

使用用户输入测试正则表达式

在这最后一步中,我们将让正则表达式程序变得交互式,允许用户输入他们想要搜索的字符串。这将使程序更加灵活,并展示如何将正则表达式与用户交互结合起来。

我们将使用 Scanner 类来读取用户的输入,你可能在“你的第一个 Java 实验”中已经了解过这个类。

  1. 在 WebIDE 编辑器中打开 HelloJava.java 文件。

  2. 将现有代码替换为以下代码:

    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();
        }
    }

    以下是我们所做的更改:

    • import java.util.Scanner;:导入 Scanner 类。
    • Scanner scanner = new Scanner(System.in);:创建一个 Scanner 对象,用于从控制台读取输入。
    • System.out.print("Enter the string to search within: ");:提示用户输入字符串。
    • String inputString = scanner.nextLine();:读取用户输入的整行内容,并将其存储在 inputString 变量中。
    • 我们添加了一个 boolean found = false; 变量和一个 if (!found) 代码块,用于在未找到匹配项时打印一条消息。
    • scanner.close();:关闭 Scanner 以释放系统资源。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 在终端中编译程序:

    javac HelloJava.java
  5. 运行程序:

    java HelloJava
  6. 程序现在会等待你输入一个字符串。输入一个包含单词 "Java" 的字符串(或者不包含),然后按回车键。

    例如,如果你输入:

    Learning Java is fun!

    输出将是:

    Enter the string to search within: Learning Java is fun!
    Searching for pattern: 'Java' in string: 'Learning Java is fun!'
    Found match at index: 9

    如果你输入:

    Python is also great.

    输出将是:

    Enter the string to search within: Python is also great.
    Searching for pattern: 'Java' in string: 'Python is also great.'
    No match found.

你现在已经成功创建了一个交互式的 Java 程序,它使用正则表达式在用户提供的字符串中搜索模式。这是正则表达式在实际应用中如何使用的一个实用示例。

总结

在这个实验中,我们首先了解了 Java 中正则表达式(regex)的基础知识,重点关注了 java.util.regex 包。我们了解到,正则表达式是用于字符串模式匹配和操作的强大工具,其中关键的类是 PatternMatcher。然后,我们通过定义一个简单的字符串并使用 Pattern.compile() 方法将其编译成 Pattern 对象,练习了创建基本的正则表达式模式,展示了如何在 Java 程序中定义和打印基本的正则表达式模式。