scolebourne 2003/07/31 13:38:26
Modified: lang/src/java/org/apache/commons/lang CharSetUtils.java
StringUtils.java
lang/src/test/org/apache/commons/lang StringUtilsTest.java
Log:
Add replaceChars() to StringUtils
Deprecate translate() on CharSetUtils
Revision Changes Path
1.17 +3 -1
jakarta-commons/lang/src/java/org/apache/commons/lang/CharSetUtils.java
Index: CharSetUtils.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/CharSetUtils.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- CharSetUtils.java 30 Jul 2003 22:17:00 -0000 1.16
+++ CharSetUtils.java 31 Jul 2003 20:38:26 -0000 1.17
@@ -345,6 +345,8 @@
* @throws NullPointerException if <code>with</code> or <code>repl</code>
* is <code>null</code>
* @throws ArrayIndexOutOfBoundsException if <code>with</code> is empty ("")
+ * @deprecated Use [EMAIL PROTECTED] StringUtils#replaceChars(String, String,
String)}.
+ * Method will be removed in Commons Lang 3.0.
*/
public static String translate(String str, String searchChars, String
replaceChars) {
if (str == null || str.length() == 0) {
1.83 +104 -1
jakarta-commons/lang/src/java/org/apache/commons/lang/StringUtils.java
Index: StringUtils.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/StringUtils.java,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- StringUtils.java 30 Jul 2003 22:17:49 -0000 1.82
+++ StringUtils.java 31 Jul 2003 20:38:26 -0000 1.83
@@ -2261,6 +2261,109 @@
buf.append(text.substring(start));
return buf.toString();
}
+
+ // Replace, character based
+ //-----------------------------------------------------------------------
+
+ /**
+ * <p>Replaces all occurrances of a character in a String with another.
+ * This is a null-safe version of [EMAIL PROTECTED] String#replace(char,
char)}.</p>
+ *
+ * <p>A <code>null</code> string input returns <code>null</code>.
+ * An empty ("") string input returns an empty string.</p>
+ *
+ * <pre>
+ * StringUtils.replaceChars(null, *, *) = null
+ * StringUtils.replaceChars("", *, *) = ""
+ * StringUtils.replaceChars("abcba", 'b', 'y') = "aycya"
+ * StringUtils.replaceChars("abcba", 'z', 'y') = "abcba"
+ * </pre>
+ *
+ * @param str String to replace characters in, may be null
+ * @param searchChar the character to search for, may be null
+ * @param replaceChar the character to replace, may be null
+ * @return modified String, <code>null</code> if null string input
+ */
+ public static String replaceChars(String str, char searchChar, char
replaceChar) {
+ if (str == null) {
+ return null;
+ }
+ return str.replace(searchChar, replaceChar);
+ }
+
+ /**
+ * <p>Replaces multiple characters in a String in one go.
+ * This method can also be used to delete characters.</p>
+ *
+ * <p>For example:<br />
+ * <code>replaceChars("hello", "ho", "jy") =
jelly</code>.</p>
+ *
+ * <p>A <code>null</code> string input returns <code>null</code>.
+ * An empty ("") string input returns an empty string.
+ * A null or empty set of search characters returns the input string.</p>
+ *
+ * <p>The length of the search characters should normally equal the length
+ * of the replace characters.
+ * If the search characters is longer, then the extra search characters
+ * are deleted.
+ * If the search characters is shorter, then the extra replace characters
+ * are ignored.</p>
+ *
+ * <pre>
+ * StringUtils.replaceChars(null, *, *) = null
+ * StringUtils.replaceChars("", *, *) = ""
+ * StringUtils.replaceChars("abc", null, *) = "abc"
+ * StringUtils.replaceChars("abc", "", *) = "abc"
+ * StringUtils.replaceChars("abc", "b", null) = "ac"
+ * StringUtils.replaceChars("abc", "b", "") = "ac"
+ * StringUtils.replaceChars("abcba", "bc", "yz") = "ayzya"
+ * StringUtils.replaceChars("abcba", "bc", "y") = "ayya"
+ * StringUtils.replaceChars("abcba", "bc", "yzx") = "ayzya"
+ * </pre>
+ *
+ * @param str String to replace characters in, may be null
+ * @param searchChars a set of characters to search for, may be null
+ * @param replaceChars a set of characters to replace, may be null
+ * @return modified String, <code>null</code> if null string input
+ */
+ public static String replaceChars(String str, String searchChars, String
replaceChars) {
+ if (str == null || str.length() == 0 || searchChars == null ||
searchChars.length()== 0) {
+ return str;
+ }
+ char[] chars = str.toCharArray();
+ int len = chars.length;
+ boolean modified = false;
+ for (int i = 0, isize = searchChars.length(); i < isize; i++) {
+ char searchChar = searchChars.charAt(i);
+ if (replaceChars == null || i >= replaceChars.length()) {
+ // delete
+ int pos = 0;
+ for (int j = 0; j < len; j++) {
+ if (chars[j] != searchChar) {
+ chars[pos++] = chars[j];
+ } else {
+ modified = true;
+ }
+ }
+ len = pos;
+ } else {
+ // replace
+ for (int j = 0; j < len; j++) {
+ if (chars[j] == searchChar) {
+ chars[j] = replaceChars.charAt(i);
+ modified = true;
+ }
+ }
+ }
+ }
+ if (modified == false) {
+ return str;
+ }
+ return new String(chars, 0, len);
+ }
+
+ // Overlay
+ //-----------------------------------------------------------------------
/**
* <p>Overlays part of a String with another String.</p>
1.41 +42 -1
jakarta-commons/lang/src/test/org/apache/commons/lang/StringUtilsTest.java
Index: StringUtilsTest.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/lang/src/test/org/apache/commons/lang/StringUtilsTest.java,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- StringUtilsTest.java 30 Jul 2003 22:21:39 -0000 1.40
+++ StringUtilsTest.java 31 Jul 2003 20:38:26 -0000 1.41
@@ -439,6 +439,47 @@
assertEquals("foofoo", StringUtils.replaceOnce("foofoofoo", "foo", ""));
}
+ public void testReplaceChars_StringCharChar() {
+ assertEquals(null, StringUtils.replaceChars(null, 'b', 'z'));
+ assertEquals("", StringUtils.replaceChars("", 'b', 'z'));
+ assertEquals("azcza", StringUtils.replaceChars("abcba", 'b', 'z'));
+ assertEquals("abcba", StringUtils.replaceChars("abcba", 'x', 'z'));
+ }
+
+ public void testReplaceChars_StringStringString() {
+ assertEquals("jelly", StringUtils.replaceChars("hello", "ho", "jy"));
+
+ assertEquals(null, StringUtils.replaceChars(null, null, null));
+ assertEquals(null, StringUtils.replaceChars(null, "", null));
+ assertEquals(null, StringUtils.replaceChars(null, "a", null));
+ assertEquals(null, StringUtils.replaceChars(null, null, ""));
+ assertEquals(null, StringUtils.replaceChars(null, null, "x"));
+
+ assertEquals("", StringUtils.replaceChars("", null, null));
+ assertEquals("", StringUtils.replaceChars("", "", null));
+ assertEquals("", StringUtils.replaceChars("", "a", null));
+ assertEquals("", StringUtils.replaceChars("", null, ""));
+ assertEquals("", StringUtils.replaceChars("", null, "x"));
+
+ assertEquals("abc", StringUtils.replaceChars("abc", null, null));
+ assertEquals("abc", StringUtils.replaceChars("abc", null, ""));
+ assertEquals("abc", StringUtils.replaceChars("abc", null, "x"));
+
+ assertEquals("abc", StringUtils.replaceChars("abc", "", null));
+ assertEquals("abc", StringUtils.replaceChars("abc", "", ""));
+ assertEquals("abc", StringUtils.replaceChars("abc", "", "x"));
+
+ assertEquals("ac", StringUtils.replaceChars("abc", "b", null));
+ assertEquals("ac", StringUtils.replaceChars("abc", "b", ""));
+ assertEquals("axc", StringUtils.replaceChars("abc", "b", "x"));
+
+ assertEquals("ayzya", StringUtils.replaceChars("abcba", "bc", "yz"));
+ assertEquals("ayya", StringUtils.replaceChars("abcba", "bc", "y"));
+ assertEquals("ayzya", StringUtils.replaceChars("abcba", "bc", "yzx"));
+
+ assertSame("abcba", StringUtils.replaceChars("abcba", "z", "w"));
+ }
+
public void testOverlayString() {
assertEquals("overlayString(String, String, int, int) failed",
"foo foor baz", StringUtils.overlayString(SENTENCE, FOO, 4, 6)
);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]