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
Revision: 1.6
Committed: Tue Dec 11 17:23:54 2001 UTC (22 years, 4 months ago) by tdb
Branch: MAIN
Branch point for: SERVER_PIRCBOT
Changes since 1.5: +76 -68 lines
Log Message:
Changed the wildcardMatch method. Now more optimal (returns immediately
when not a match), and only matches one value against a single expression.
This makes it more generic and useful for other bits of code.

File Contents

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2 tdb 1.4 package uk.org.iscream.cms.server.util;
3 tdb 1.1
4     //---IMPORTS---
5     import java.util.*;
6    
7     /**
8     * A class containing useful methods for manipulating
9     * String objects.
10     *
11 tdb 1.6 * @author $Author: tdb $
12     * @version $Id: StringUtils.java,v 1.5 2001/12/10 22:49:19 tdb Exp $
13 tdb 1.1 */
14     public class StringUtils {
15    
16     //---FINAL ATTRIBUTES---
17    
18     /**
19     * The current CVS revision of this class
20     */
21 tdb 1.6 public static final String REVISION = "$Revision: 1.5 $";
22 tdb 1.1
23     //---STATIC METHODS---
24    
25     /**
26     * Searches a string and replaces all occurences
27     * of the given search text with the given replacement
28     * text.
29     *
30     * @param text the text to search and replace in
31     * @param search the string to look for and replace
32     * @param replace the text to replace with
33     * @return the updated version of text
34     */
35     public static String replaceText(String text, String search, String replace) {
36     StringBuffer textBuffer = new StringBuffer(text);
37     int currIndex = 0;
38     currIndex = text.indexOf(search, currIndex);
39     while(currIndex != -1) {
40     if (currIndex != -1) {
41     textBuffer.delete(currIndex, currIndex + search.length());
42     textBuffer.insert(currIndex, replace);
43     }
44     text = textBuffer.toString();
45     currIndex = text.indexOf(search, currIndex + search.length());
46     }
47     return new String(textBuffer);
48 ajm 1.2 }
49    
50     /**
51     * This method takes an array of String's and a
52     * String to look for and returns the position
53     * in the array that the string occurs.
54     *
55     * @param search the string to look for
56     * @param array the array to look in
57     *
58     * @return the position in the array
59     */
60     public static int getStringPos(String search, String[] array) {
61     for(int x = 0; x < array.length; x++) {
62     if (array[x].equals(search)) {
63     return x;
64     }
65     }
66     return -1;
67 tdb 1.5 }
68    
69     /**
70 tdb 1.6 * Checks if a given string matches a
71     * wildcard expression. For example:<br>
72 tdb 1.5 * <br>
73 tdb 1.6 * Given "testingstring"<br>
74     * And "test*ing"<br>
75 tdb 1.5 * <br>
76 tdb 1.6 * This method would return true as there is a match.
77 tdb 1.5 *
78 tdb 1.6 * @param in the string to check
79     * @param expression the wildcard expression to match against
80 tdb 1.5 *
81     * @return if there is a match
82     */
83 tdb 1.6 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 tdb 1.5 }
98 tdb 1.6 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 tdb 1.5 }
141     }
142 tdb 1.6 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 tdb 1.1 }
153    
154     //---CONSTRUCTORS---
155    
156     //---PUBLIC METHODS---
157    
158     /**
159     * Overrides the {@link java.lang.Object#toString() Object.toString()}
160     * method to provide clean logging (every class should have this).
161     *
162 tdb 1.4 * This uses the uk.org.iscream.cms.server.util.FormatName class
163 tdb 1.1 * to format the toString()
164     *
165     * @return the name of this class and its CVS revision
166     */
167     public String toString() {
168     return FormatName.getName(
169     _name,
170     getClass().getName(),
171     REVISION);
172     }
173    
174     //---PRIVATE METHODS---
175    
176     //---ACCESSOR/MUTATOR METHODS---
177    
178     //---ATTRIBUTES---
179    
180     /**
181     * This is the friendly identifier of the
182     * component this class is running in.
183     * eg, a Filter may be called "filter1",
184     * If this class does not have an owning
185     * component, a name from the configuration
186     * can be placed here. This name could also
187     * be changed to null for utility classes.
188     */
189     private String _name = null;
190    
191     //---STATIC ATTRIBUTES---
192    
193     }