// Copyright Freehep 2006.
package org.freehep.util;
import java.util.regex.Pattern;
/**
*
* @author Mark Donszelmann
* @version $Id: StringUtilities.java 8584 2006-08-10 23:06:37Z duns $
*/
public class StringUtilities {
private StringUtilities() {
// static methods only
}
public static String replace(CharSequence target, CharSequence replacement, String string) {
return Pattern.compile(quote(target.toString()) /* Pattern.LITERAL jdk 1.4 */).matcher(
string).replaceAll(/* Matcher. jdk 1.4 */ quoteReplacement(replacement.toString()));
}
/* for jdk 1.4 */
private static String quote(String s) {
int slashEIndex = s.indexOf("\\E");
if (slashEIndex == -1)
return "\\Q" + s + "\\E";
StringBuffer sb = new StringBuffer(s.length() * 2);
sb.append("\\Q");
slashEIndex = 0;
int current = 0;
while ((slashEIndex = s.indexOf("\\E", current)) != -1) {
sb.append(s.substring(current, slashEIndex));
current = slashEIndex + 2;
sb.append("\\E\\\\E\\Q");
}
sb.append(s.substring(current, s.length()));
sb.append("\\E");
return sb.toString();
}
/* for jdk 1.4 */
private static String quoteReplacement(String s) {
if ((s.indexOf('\\') == -1) && (s.indexOf('$') == -1))
return s;
StringBuffer sb = new StringBuffer();
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if (c == '\\') {
sb.append('\\'); sb.append('\\');
} else if (c == '$') {
sb.append('\\'); sb.append('$');
} else {
sb.append(c);
}
}
return sb.toString();
}
}