{"id":67,"date":"2007-04-20T11:02:59","date_gmt":"2007-04-20T10:02:59","guid":{"rendered":"http:\/\/blogs.igalia.com\/eocanha\/?p=67"},"modified":"2015-11-08T00:21:09","modified_gmt":"2015-11-07T23:21:09","slug":"string-filtering-in-java","status":"publish","type":"post","link":"https:\/\/eocanha.org\/blog\/2007\/04\/20\/string-filtering-in-java\/","title":{"rendered":"String filtering in Java"},"content":{"rendered":"<p>Today I&#8217;ve needed to match strings in Java against a pattern similar to the ones used in filename matching. Java already has a <code>String.matches()<\/code> method to test against a regular expression, but hasn&#8217;t  one to match against more limited filename-like patterns (* and ? wildcards).<\/p>\n<p>At first, I tought about implementing the matching by hand, comparing character to character, but soon found a quickier and simpler approach: transform the pattern into a regular expression. Maybe this source code could be useful for you:<\/p>\n<pre>\n    private boolean matchFilter(String sample, String filter) {\n        if (sample==null || filter==null) return true;\n\n        StringBuffer f=new StringBuffer(\".*\");\n        \n        for (StringTokenizer st=new StringTokenizer(\n                filter,\"%*\",true);\n                st.hasMoreTokens();) {\n            String t=st.nextToken();\n            if (t.equals(\"?\")) f.append(\".\");\n            else if (t.equals(\"*\")) f.append(\".*\");\n            else f.append(Pattern.quote(t));\n        }\n        f.append(\".*\");\n        \n        return sample.matches(f.toString());\n    }\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Today I&#8217;ve needed to match strings in Java against a pattern similar to the ones used in filename matching. Java already has a String.matches() method to test against a regular expression, but hasn&#8217;t one to match against more limited filename-like patterns (* and ? wildcards). At first, I tought about implementing the matching by hand, &hellip; <a href=\"https:\/\/eocanha.org\/blog\/2007\/04\/20\/string-filtering-in-java\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">String filtering in Java<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/posts\/67"}],"collection":[{"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/comments?post=67"}],"version-history":[{"count":1,"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/posts\/67\/revisions"}],"predecessor-version":[{"id":435,"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/posts\/67\/revisions\/435"}],"wp:attachment":[{"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/media?parent=67"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/categories?post=67"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eocanha.org\/blog\/wp-json\/wp\/v2\/tags?post=67"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}