Tune StringUtils.replaceString methods to delay buffer allocation until necessary, and to allocate a larger buffer up front if needed.

This is faster than String.replace(String, String), which uses regex under the hood.

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@6930 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Ryan Gustafson committed 2009-05-01 04:53:26 +00:00
1 parent 1a18003f2e
commit 24cd90a0c1
1 file changed
+34 -30
@@ -60,38 +60,42 @@ public final class StringUtil {
return a.equals(b);
}
public static String replaceString(String original, char oldChar, String newString) {
String fixedNew = newString == null ? "" : newString;
StringBuilder desc = new StringBuilder();
int index = original.indexOf(oldChar);
int last = 0;
while (index != -1) {
desc.append(original.substring(last, index));
desc.append(fixedNew);
last = index + 1;
index = original.indexOf(oldChar, last);
}
desc.append(original.substring(last));
return desc.toString();
public static String replaceString(final String original, char oldChar, final String newString) {
int index = original.indexOf(oldChar);
if (index < 0) {
return original;
} else {
final String replace = newString == null ? "" : newString;
final StringBuilder buf = new StringBuilder(Math.max(16, original.length() + replace.length()));
int last = 0;
while (index != -1) {
buf.append(original.substring(last, index));
buf.append(replace);
last = index + 1;
index = original.indexOf(oldChar, last);
}
buf.append(original.substring(last));
return buf.toString();
}
}
public static String replaceString(String original, String oldString, String newString) {
String fixedNew = newString == null ? "" : newString;
StringBuilder desc = new StringBuilder();
int index = original.indexOf(oldString);
int last = 0;
while (index != -1) {
desc.append(original.substring(last, index));
desc.append(fixedNew);
last = index + oldString.length();
index = original.indexOf(oldString, last);
}
desc.append(original.substring(last));
return desc.toString();
public static String replaceString(final String original, final String oldString, final String newString) {
int index = original.indexOf(oldString);
if (index < 0) {
return original;
} else {
final String replace = newString == null ? "" : newString;
final StringBuilder buf = new StringBuilder(Math.max(16, original.length() + replace.length()));
int last = 0;
while (index != -1) {
buf.append(original.substring(last, index));
buf.append(replace);
last = index + oldString.length();
index = original.indexOf(oldString, last);
}
buf.append(original.substring(last));
return buf.toString();
}
}
/**