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.10
Committed: Sun Aug 1 10:41:08 2004 UTC (19 years, 8 months ago) by tdb
Branch: MAIN
CVS Tags: HEAD
Changes since 1.9: +3 -3 lines
Log Message:
Catch a lot of old URL's and update them. Also remove a couple of old files
that aren't used.

File Contents

# Content
1 /*
2 * i-scream central monitoring system
3 * http://www.i-scream.org
4 * Copyright (C) 2000-2002 i-scream
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */
20
21 //---PACKAGE DECLARATION---
22 package uk.org.iscream.cms.util;
23
24 //---IMPORTS---
25 import java.util.*;
26
27 /**
28 * A class containing useful methods for manipulating
29 * String objects.
30 *
31 * @author $Author: tdb $
32 * @version $Id: StringUtils.java,v 1.9 2003/02/05 14:27:59 tdb Exp $
33 */
34 public class StringUtils {
35
36 //---FINAL ATTRIBUTES---
37
38 /**
39 * The current CVS revision of this class
40 */
41 public static final String REVISION = "$Revision: 1.9 $";
42
43 //---STATIC METHODS---
44
45 /**
46 * Searches a string and replaces all occurences
47 * of the given search text with the given replacement
48 * text.
49 *
50 * @param text the text to search and replace in
51 * @param search the string to look for and replace
52 * @param replace the text to replace with
53 * @return the updated version of text
54 */
55 public static String replaceText(String text, String search, String replace) {
56 StringBuffer textBuffer = new StringBuffer(text);
57 int currIndex = 0;
58 currIndex = text.indexOf(search, currIndex);
59 while(currIndex != -1) {
60 if (currIndex != -1) {
61 textBuffer.delete(currIndex, currIndex + search.length());
62 textBuffer.insert(currIndex, replace);
63 }
64 text = textBuffer.toString();
65 currIndex = text.indexOf(search, currIndex + search.length());
66 }
67 return new String(textBuffer);
68 }
69
70 /**
71 * This method takes an array of String's and a
72 * String to look for and returns the position
73 * in the array that the string occurs.
74 *
75 * @param search the string to look for
76 * @param array the array to look in
77 *
78 * @return the position in the array
79 */
80 public static int getStringPos(String search, String[] array) {
81 for(int x = 0; x < array.length; x++) {
82 if (array[x].equals(search)) {
83 return x;
84 }
85 }
86 return -1;
87 }
88
89 /**
90 * Checks if a given string matches a
91 * wildcard expression. For example:<br>
92 * <br>
93 * Given "testingstring"<br>
94 * And "test*ing"<br>
95 * <br>
96 * This method would return true as there is a match.
97 *
98 * @param in the string to check
99 * @param expression the wildcard expression to match against
100 *
101 * @return if there is a match
102 */
103 public static boolean wildcardMatch(String in, String expression) {
104 // check actually has wildcards
105 if(expression.indexOf("*") != -1) {
106 StringTokenizer st = new StringTokenizer(expression, "*");
107 String part = "";
108 int index = 0;
109 // the first token will be everything at the start
110 // unless it starts with a wildcard
111 // -- if it starts with a wildcard the start
112 // will always match
113 if(!expression.startsWith("*")) {
114 part = st.nextToken();
115 if (in.startsWith(part)) {
116 index = part.length();
117 }
118 else {
119 // doesn't start with the first part
120 // can't be a match
121 return false;
122 }
123 }
124 while (st.hasMoreTokens()) {
125 part = st.nextToken();
126 // if the next section can't be matched
127 // then this isn't in the input string
128 if(in.substring(index).indexOf(part) == -1) {
129 // we don't want to look through any more of it
130 // can't be a match if this part isn't there
131 return false;
132 }
133 else {
134 // move index pointer to start of the "rest"
135 // where the rest is everything after what we just matched
136 index += in.substring(index).indexOf(part) + part.length();
137 }
138 }
139 // if we reach here and we've found a match
140 // we want to check that the last part
141 // of the wildcard string is the last part
142 // of the input string, if it is, we break out
143 // and finish as we've found a match.
144 // if the end of the wildcard is a *, then
145 // we don't care
146 if (!expression.endsWith("*")) {
147 if ((in.endsWith(part))) {
148 return true;
149 }
150 else {
151 // doesn't end with the first part
152 // can't be a match
153 return false;
154 }
155 // ends with a *, so it matches the
156 // end regardless
157 }
158 else {
159 return true;
160 }
161 }
162 else if(in.equals(expression)) {
163 // might as well do a check if they're the same
164 // bit daft to call this whole method if they are though :)
165 return true;
166 }
167 else {
168 // obviously doesn't match if it's not a wildcard
169 // expression or isn't equal :)
170 return false;
171 }
172 }
173
174 //---CONSTRUCTORS---
175
176 //---PUBLIC METHODS---
177
178 /**
179 * Overrides the {@link java.lang.Object#toString() Object.toString()}
180 * method to provide clean logging (every class should have this).
181 *
182 * This uses the uk.org.iscream.cms.server.util.FormatName class
183 * to format the toString()
184 *
185 * @return the name of this class and its CVS revision
186 */
187 public String toString() {
188 return FormatName.getName(
189 _name,
190 getClass().getName(),
191 REVISION);
192 }
193
194 //---PRIVATE METHODS---
195
196 //---ACCESSOR/MUTATOR METHODS---
197
198 //---ATTRIBUTES---
199
200 /**
201 * This is the friendly identifier of the
202 * component this class is running in.
203 * eg, a Filter may be called "filter1",
204 * If this class does not have an owning
205 * component, a name from the configuration
206 * can be placed here. This name could also
207 * be changed to null for utility classes.
208 */
209 private String _name = null;
210
211 //---STATIC ATTRIBUTES---
212
213 }