Java: Match two strings where one string contains wildcard characters
Java String: Exercise-53 with Solution
Write a Java program to match two strings where one string contains wildcard characters.
Visual Presentation:
Sample Solution:
Java Code:
// Importing necessary Java utilities.
import java.util.*;
// Define a class named Main.
class Main {
// Method to check for matching pattern using wildcard characters.
public static boolean chkMatching(char[] str1, char[] patstr, int n, int m, boolean[][] lookup) {
// Base case: Both strings are empty, return true.
if (m < 0 && n < 0) {
return true;
} else if (m < 0) {
// If pattern string is empty but main string is not, return false.
return false;
} else if (n < 0) {
// If main string is empty but pattern string contains only '*', return true.
for (int i = 0; i <= m; i++) {
if (patstr[i] != '*') {
return false;
}
}
return true;
}
// If lookup table at current indices has not been calculated yet.
if (!lookup[m][n]) {
if (patstr[m] == '*') {
// If pattern contains '*', check for matching by moving in both directions in pattern.
lookup[m][n] = chkMatching(str1, patstr, n - 1, m, lookup) ||
chkMatching(str1, patstr, n, m - 1, lookup);
} else {
// If characters at current positions match or are '?' (wildcard), move to the previous positions.
if (patstr[m] != '?' && patstr[m] != str1[n]) {
lookup[m][n] = false;
} else {
lookup[m][n] = chkMatching(str1, patstr, n - 1, m - 1, lookup);
}
}
}
return lookup[m][n];
}
// Main method to execute the program.
public static void main(String[] args) {
// Define two strings for comparison.
String st1 = "abcdhgh";
String st2 = "abc*d?*";
System.out.println("The given string is: " + st1);
System.out.println("The given pattern string is: " + st2);
// Convert strings to char arrays for pattern matching.
char[] str1 = st1.toCharArray();
char[] patstr = st2.toCharArray();
// Create a lookup table for memoization.
boolean[][] lookup = new boolean[str1.length + 1][patstr.length + 1];
// Check if the given pattern matches the string using the chkMatching method.
if (chkMatching(str1, patstr, str1.length - 1, patstr.length - 1, lookup)) {
System.out.println("The given pattern is matching.");
} else {
System.out.println("The given pattern is not matching.");
}
}
}
Sample Output:
The given string is: abcdhgh The given pattern string is: abc*d?* The given pattern is matching.
Flowchart: 1
Flowchart: 2
Java Code Editor:
Improve this sample solution and post your code through Disqus
Previous: Write a Java program to check if two given strings are rotations of each other.
Next: Write a Java program to find the smallest window in a string containing all characters of another string.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://www.w3resource.com/java-exercises/string/java-string-exercise-53.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics