Wildcard-Suche in Strings mit Java

Dank Adarshr konnte ich heute ein Problem schnell und elegant lösen.

Ich benötigte eine Methode, um in einem beliebigen String nach einem Substring zu suchen, inklusive einer Wildcard (*). Ich wollte also zum Beispiel nach „*Test*“ suchen können, in einem String wie: „Das ist nur ein Test“. Java bietet sowas nativ nicht an, auch die Apache Commons Libs haben dazu keine Lösung, nach einem schnellen Suchlauf bei Google wurde ich dann bei Adarshr fündig. Er hat das Problem gut und kurz gelöst. Ich habe es dann noch um einen Null-Check erweitert und ein paar andere Anpassungen vorgenommen. Die Basis bildet aber weiterhin seine Methode, die ich euch hier nicht vorenthalten möchte.

Falls ihr also mal auf der Suche nach einer Wildcard-Suche für Strings seid, dann erinnert euch an diesen Artikel ;).

    /**
     * Performs a wildcard matching for the text and pattern 
     * provided.
     * 
     * @param text the text to be tested for matches.
     * 
     * @param pattern the pattern to be matched for.
     * This can contain the wildcard character '*' (asterisk).
     * 
     * @return <tt>true</tt> if a match is found, <tt>false</tt> 
     * otherwise.
     */
    public static boolean wildCardMatch(String text, String pattern)
    {
        // Create the cards by splitting using a RegEx. If more speed 
        // is desired, a simpler character based splitting can be done.
        String [] cards = pattern.split("\\*");
 
        // Iterate over the cards.
        for (String card : cards)
        {
            int idx = text.indexOf(card);
 
            // Card not detected in the text.
            if(idx == -1)
            {
                return false;
            }
 
            // Move ahead, towards the right of the text.
            text = text.substring(idx + card.length());
        }
 
        return true;
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert