Java 字符串对比如何匹配通配符

在 Java 编程中,经常会遇到需要对字符串进行匹配的场景,比如过滤文件名、用户输入的搜索词等。在这些情况下,通配符匹配成为一种非常实用的工具。通配符通常用于表示一个或多个不确定字符。在 Java 中,我们可以通过正则表达式以及其他一些方法来实现对字符串的匹配和对比。

实际问题

假设我们正在开发一个文件管理系统,用户可以通过输入通配符来搜索文件。例如,用户希望能够通过输入 *.txt 来查找所有的文本文件。我们需要实现一个方法,接受用户输入的通配符,并返回匹配的文件名列表。

类设计

在实现这个功能之前,我们需要设计一个类来处理文件名的匹配。这个类将包含匹配的方法和文件列表。以下是我们的类图:

classDiagram
    class FileMatcher {
        - List<String> files
        + FileMatcher(List<String> files)
        + List<String> match(String pattern)
    }

在这个类中:

  • files 是一个字符串列表,存储所有待匹配的文件名。
  • FileMatcher 构造函数接受一个文件名列表。
  • match 方法用于根据用户输入的通配符进行匹配。

实现代码

下面是 FileMatcher 类的具体实现代码:

import java.util.ArrayList;
import java.util.List;

public class FileMatcher {
    private List<String> files;

    public FileMatcher(List<String> files) {
        this.files = files;
    }

    public List<String> match(String pattern) {
        List<String> matchedFiles = new ArrayList<>();
        String regexPattern = pattern.replace(".", "\\.")
                                      .replace("*", ".*") // 将 '*' 替换为正则表达式中的 '.*'
                                      .replace("?", ".");  // '?' 替换为 '.'
        for (String file : files) {
            if (file.matches(regexPattern)) {
                matchedFiles.add(file);
            }
        }
        return matchedFiles;
    }
}

使用示例

在主程序中,我们可以测试这个 FileMatcher 类。下面是一个简单的使用示例:

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> fileList = Arrays.asList("document1.txt", "image.png", "notes.txt", "homework.doc");
        FileMatcher fileMatcher = new FileMatcher(fileList);
        
        List<String> matchedFiles = fileMatcher.match("*.txt");
        System.out.println("Matched files: " + matchedFiles);
    }
}

在上述代码中,我们创建了一个 FileMatcher 对象,并通过调用 match 方法来查找所有以 .txt 结尾的文件名。运行程序后,输出结果应该为:

Matched files: [document1.txt, notes.txt]

流程图

为了更好地阐明整个过程,我们可以使用流程图来展示匹配的过程:

flowchart TD
    A[开始] --> B[获取文件列表]
    B --> C[获取用户输入的通配符]
    C --> D[构建正则表达式]
    D --> E{遍历文件列表}
    E -->|是| F[文件名匹配正则表达式?]
    E -->|否| G[结束遍历]
    F -->|是| H[添加到匹配列表]
    F -->|否| E
    H --> E
    G --> I[返回匹配文件列表]
    I --> J[结束]

通过这个流程图,我们可以清晰地看到从输入用户通配符到遍历文件和返回结果的整个过程。

结尾

通配符匹配是 Java 开发中一项非常实用的功能,它帮助我们灵活地处理字符串对比的情况。在本文中,我们通过 FileMatcher 类示例,演示了如何使用正则表达式匹配用户输入的文件名通配符,帮助用户快速查找文件。希望这篇文章能为你在 Java 编程中解决字符串匹配问题提供一些启示。