java实现匹配字符串(附完整源码)

时间:2025-02-15 10:41:47
public class StringMatcher { // 判断 text 字符串是否包含 pattern 字符串 public static boolean isMatch(String text, String pattern) { int n = text.length(); int m = pattern.length(); // 如果 pattern 为空,则 text 必须也为空才匹配 if (m == 0) { return (n == 0); } // 初始化 dp 数组 boolean[][] dp = new boolean[n + 1][m + 1]; dp[0][0] = true; // 处理 pattern 的第一行 for (int j = 1; j <= m; j++) { if (pattern.charAt(j - 1) == '*') { dp[0][j] = dp[0][j - 2]; } } // 处理剩余的行和列 for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { char c = text.charAt(i - 1); char p = pattern.charAt(j - 1); // 如果当前字符匹配,则 dp[i][j] 取决于 dp[i-1][j-1] if (c == p || p == '.') { dp[i][j] = dp[i - 1][j - 1]; } // 如果当前字符是 '*',则有两种情况: // 1. '*' 匹配了 0 个前一个字符,此时 dp[i][j] 取决于 dp[i][j-2] // 2. '*' 匹配了 1 个或多个前一个字符,此时 dp[i][j] 取决于 dp[i-1][j] else if (p == '*') { if (dp[i][j - 2]) { dp[i][j] = true; } else if (c == pattern.charAt(j - 2) || pattern.charAt(j - 2) == '.') { dp[i][j] = dp[i - 1][j]; } } // 如果当前字符不匹配,则 dp[i][j] 为 false else { dp[i][j] = false; } } } return dp[n][m]; } public static void main(String[] args) { String text = "hello world"; String pattern = "ll"; boolean isMatched = isMatch(text, pattern); if (isMatched) { System.out.println("Text contains pattern."); } else { System.out.println("Text does not contain pattern."); } } }