01: /**
02: * Sequoia: Database clustering technology.
03: * Copyright (C) 2002-2004 French National Institute For Research In Computer
04: * Science And Control (INRIA).
05: * Contact: sequoia@continuent.org
06: *
07: * Licensed under the Apache License, Version 2.0 (the "License");
08: * you may not use this file except in compliance with the License.
09: * You may obtain a copy of the License at
10: *
11: * http://www.apache.org/licenses/LICENSE-2.0
12: *
13: * Unless required by applicable law or agreed to in writing, software
14: * distributed under the License is distributed on an "AS IS" BASIS,
15: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16: * See the License for the specific language governing permissions and
17: * limitations under the License.
18: *
19: * Initial developer(s): Marc Wick.
20: * Contributor(s): Mathieu Peltier.
21: */package org.continuent.sequoia.common.util;
22:
23: /**
24: * This class provides utilities for Strings manipulation.
25: *
26: * @author <a href="mailto:mwick@dplanet.ch">Marc Wick</a>
27: * @author <a href="mailto:mathieu.peltier@emicnetworks.com">Mathieu Peltier</a>
28: * @version 1.0
29: */
30: public class Strings {
31:
32: /**
33: * Replaces all occurrences of a String within another String.
34: *
35: * @param sourceString source String
36: * @param replace text pattern to replace
37: * @param with replacement text
38: * @return the text with any replacements processed, <code>null</code> if
39: * null String input
40: */
41: public static String replace(String sourceString, String replace,
42: String with) {
43: if (sourceString == null || replace == null || with == null
44: || "".equals(replace)) {
45: return sourceString;
46: }
47:
48: StringBuffer buf = new StringBuffer(sourceString.length());
49: int start = 0, end = 0;
50: while ((end = sourceString.indexOf(replace, start)) != -1) {
51: buf.append(sourceString.substring(start, end)).append(with);
52: start = end + replace.length();
53: }
54: buf.append(sourceString.substring(start));
55: return buf.toString();
56: }
57:
58: /**
59: * Replaces all occurrences of a String within another String. The String to
60: * be replaced will be replaced ignoring cases, all other cases are preserved
61: * in the returned string
62: *
63: * @param sourceString source String
64: * @param replace text to replace, case insensitive
65: * @param with replacement text
66: * @return the text with any replacements processed, <code>null</code> if
67: * null String input
68: */
69: public static String replaceCasePreserving(String sourceString,
70: String replace, String with) {
71: if (sourceString == null || replace == null || with == null) {
72: return sourceString;
73: }
74: String lower = sourceString.toLowerCase();
75: int shift = 0;
76: int idx = lower.indexOf(replace);
77: int length = replace.length();
78: StringBuffer resultString = new StringBuffer(sourceString);
79: do {
80: resultString = resultString.replace(idx + shift, idx
81: + shift + length, with);
82: shift += with.length() - length;
83: idx = lower.indexOf(replace, idx + length);
84: } while (idx > 0);
85:
86: return resultString.toString();
87: }
88:
89: }
|