ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/util/uk/org/iscream/cms/util/StringUtils.java
(Generate patch)

Comparing projects/cms/source/util/uk/org/iscream/cms/util/StringUtils.java (file contents):
Revision 1.4 by tdb, Tue May 29 17:02:35 2001 UTC vs.
Revision 1.6 by tdb, Tue Dec 11 17:23:54 2001 UTC

# Line 65 | Line 65 | public class StringUtils {
65          }
66          return -1;
67      }
68 +    
69 +    /**
70 +     * Checks if a given string matches a
71 +     * wildcard expression. For example:<br>
72 +     * <br>
73 +     * Given "testingstring"<br>
74 +     * And   "test*ing"<br>
75 +     * <br>
76 +     * This method would return true as there is a match.
77 +     *
78 +     * @param in the string to check
79 +     * @param expression the wildcard expression to match against
80 +     *
81 +     * @return if there is a match
82 +     */
83 +    public static boolean wildcardMatch(String in, String expression) {
84 +        // check actually has wildcards
85 +        if(expression.indexOf("*") != -1) {
86 +            StringTokenizer st = new StringTokenizer(expression, "*");
87 +            String part = "";
88 +            int index = 0;
89 +            // the first token will be everything at the start
90 +            // unless it starts with a wildcard
91 +            // -- if it starts with a wildcard the start
92 +            //    will always match
93 +            if(!expression.startsWith("*")) {
94 +                part = st.nextToken();
95 +                if (in.startsWith(part)) {
96 +                    index = part.length();
97 +                }
98 +                else {
99 +                    // doesn't start with the first part
100 +                    // can't be a match
101 +                    return false;
102 +                }
103 +            }
104 +            while (st.hasMoreTokens()) {
105 +                part = st.nextToken();
106 +                // if the next section can't be matched
107 +                // then this isn't in the input string
108 +                if(in.substring(index).indexOf(part) == -1) {
109 +                    // we don't want to look through any more of it
110 +                    // can't be a match if this part isn't there
111 +                    return false;
112 +                }
113 +                else {
114 +                    // move index pointer to start of the "rest"
115 +                    // where the rest is everything after what we just matched
116 +                    index += in.substring(index).indexOf(part) + part.length();
117 +                }
118 +            }
119 +            // if we reach here and we've found a match
120 +            // we want to check that the last part
121 +            // of the wildcard string is the last part
122 +            // of the input string, if it is, we break out
123 +            // and finish as we've found a match.
124 +            // if the end of the wildcard is a *, then
125 +            // we don't care
126 +            if (!expression.endsWith("*")) {
127 +                if ((in.endsWith(part))) {
128 +                    return true;
129 +                }
130 +                else {
131 +                    // doesn't end with the first part
132 +                    // can't be a match
133 +                    return false;
134 +                }
135 +            // ends with a *, so it matches the
136 +            // end regardless
137 +            }
138 +            else {
139 +                return true;
140 +            }
141 +        }
142 +        else if(in.equals(expression)) {
143 +            // might as well do a check if they're the same
144 +            // bit daft to call this whole method if they are though :)
145 +            return true;
146 +        }
147 +        else {
148 +            // obviously doesn't match if it's not a wildcard
149 +            // expression or isn't equal :)
150 +            return false;
151 +        }
152 +    }
153  
154   //---CONSTRUCTORS---
155  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines