Wildcardsuche/Suche mit Platzhaltern
Siehe auch Reguläre Ausdrücke
package com.sowas.snippets; /** * Wildcardsuche. Unterstützt '*' und '?'. */ public class Wildcard{ private final String wildcardString; /** * Der Konstruktor für die WildcardSuche. * * @param wildcardString Der WildcardString */ public Wildcard(String wildcardString){ this.wildcardString = wildcardString; } /** * Die Methode, welche den Vergleich durchführt. * * @param str Der String, welcher darauf überprüft werden soll, ob er dem WildcardString entspricht. * @return true Wenn der String dem wildcardString entspricht. */ public boolean match(String str, boolean fCasesensitive){ if (str == null || wildcardString == null){ return false; } return recursiveMatch(wildcardString, str, fCasesensitive); } /** * Hier wird der eigentliche Vergleich durchgeführt * * @param strWildcard Der Wildcardstring, z.B.: "Test*" * @param str Der zu überprüfende String, z.B. "Testlauf" * @return true, wenn eine Übereinstimmung vorhanden ist, sonst false */ private boolean recursiveMatch(String strWildcard, String str, boolean fCasesensitive) { while (true){ if (strWildcard.length() == 0) return str.length() == 0; char ch = strWildcard.charAt(0); switch (ch){ case '?': if (str.length() == 0) return false; break; case '*': strWildcard = strWildcard.substring(1); while (true){ if (recursiveMatch(strWildcard, str, fCasesensitive)) return true; if (str.length() == 0) return false; str = str.substring(1); } default: if (str.length() == 0) return false; if (fCasesensitive){ if (ch != str.charAt(0)) return false; }else if (Character.toLowerCase(ch) != Character.toLowerCase(str.charAt(0))) return false; break; } strWildcard = strWildcard.substring(1); str = str.substring(1); } } /** * Eine kleine Demo der Anwendung. * * @param args */ public static void main(String[] args){ Wildcard wildcard1 = new Wildcard("Test*"); System.out.println(wildcard1.match("Testlauf", true)); // true System.out.println(wildcard1.match("Fehler", true)); // false Wildcard wildcard2 = new Wildcard("T?st"); System.out.println(wildcard2.match("Test", true)); // true System.out.println(wildcard2.match("test", true)); // false System.out.println(wildcard2.match("test", false)); // true } }