1. static boolean isMatch(String p, String str) {
  2. if (p.isEmpty() && str.isEmpty())
  3. return true;
  4. else if (p.isEmpty() && !str.isEmpty())
  5. return false;
  6. else if (str.isEmpty() && p.charAt(0) == '*')
  7. return isMatch(p.substring(1), str);
  8. else if (str.isEmpty())
  9. return false;
  10.  
  11. if (p.charAt(0) == '?' || p.charAt(0) == str.charAt(0))
  12. return isMatch(p.substring(1), str.substring(1));
  13. else if (p.charAt(0) != '*')
  14. return false;
  15.  
  16. boolean match = false;
  17.  
  18. if (p.length() == 1)
  19. return true;
  20. for (int i = 0; i < str.length(); i++) {
  21. match = isMatch(p.substring(1), str.substring(i));
  22.  
  23. if (match)
  24. break;
  25. }
  26.  
  27. return match;
  28. }