scolebourne 2003/07/15 16:41:54 Modified: lang/src/test/org/apache/commons/lang StringUtilsTest.java lang/src/java/org/apache/commons/lang StringUtils.java Log: Update Javadoc defining empty, space and whitespace Improve performance of repeat Add defaultString(String) back in for performance Revision Changes Path 1.22 +26 -3 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.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- StringUtilsTest.java 23 Jun 2003 03:51:13 -0000 1.21 +++ StringUtilsTest.java 15 Jul 2003 23:41:54 -0000 1.22 @@ -259,8 +259,16 @@ } public void testRepeat() { - assertEquals("repeat(String, int) failed", - FOO + FOO + FOO, StringUtils.repeat(FOO, 3) ); + assertEquals("", StringUtils.repeat("ab", 0)); + assertEquals("", StringUtils.repeat("", 3)); + assertEquals("aaa", StringUtils.repeat("a", 3)); + assertEquals("ababab", StringUtils.repeat("ab", 3)); + assertEquals("abcabcabc", StringUtils.repeat("abc", 3)); + try { + StringUtils.repeat(null, 0); + fail(); + } catch (NullPointerException ex) { + } } public void testCenter() { @@ -436,6 +444,21 @@ FOO, StringUtils.defaultString(FOO, BAR) ); assertEquals("defaultString(null,String) failed", BAR, StringUtils.defaultString(null, BAR) ); + + assertEquals("defaultString((Object) empty-string) failed", + "", StringUtils.defaultString((Object) "") ); + assertEquals("defaultString((Object) String) failed", + FOO, StringUtils.defaultString((Object) FOO) ); + assertEquals("defaultString((Object) null) failed", + "", StringUtils.defaultString((Object) null) ); + assertEquals("defaultString((Object) empty-string,String) failed", + "", StringUtils.defaultString((Object) "", BAR) ); + assertEquals("defaultString((Object) String,String) failed", + FOO, StringUtils.defaultString((Object) FOO, BAR) ); + assertEquals("defaultString((Object) null,String) failed", + BAR, StringUtils.defaultString((Object) null, BAR) ); + assertEquals("defaultString(Boolean.TRUE,String) failed", + Boolean.TRUE.toString(), StringUtils.defaultString(Boolean.TRUE, BAR) ); } public void testEscapeFunctions() { 1.56 +316 -143 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.55 retrieving revision 1.56 diff -u -r1.55 -r1.56 --- StringUtils.java 14 Jul 2003 23:02:08 -0000 1.55 +++ StringUtils.java 15 Jul 2003 23:41:54 -0000 1.56 @@ -61,10 +61,21 @@ /** * <p>Common <code>String</code> manipulation routines.</p> * - * <p>Originally from - * <a href="http://jakarta.apache.org/turbine/">Turbine</a> and the - * GenerationJavaCore library.</p> + * <p>The <code>StringUtils</code> class defines certain words related to + * String handling.</p> + * + * <ul> + * <li>null - <code>null</code> + * <li>empty - a zero-length string (<code>""</code>) + * <li>space - the space character (<code>' '</code>)(32) + * <li>whitespace - the characters defined by [EMAIL PROTECTED] Character#isWhitespace(char)} + * </ul> + * + * <p>The <code>StringUtils</code> class varies in its handling of + * <code>null</code>. Each method should be consulted individually.</p> * + * @author <a href="http://jakarta.apache.org/turbine/">Apache Jakarta Turbine</a> + * @author GenerationJavaCore * @author <a href="mailto:[EMAIL PROTECTED]">Jon S. Stevens</a> * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Rall</a> * @author <a href="mailto:[EMAIL PROTECTED]">Greg Coladonato</a> @@ -89,16 +100,16 @@ private static int PAD_LIMIT = 8192; /** - * <p>A <code>String</code> containing all blank characters.</p> + * <p>A <code>String</code> containing all space characters (' ').</p> * - * <p>Used for efficient blank padding. The length of the string expands as needed.</p> + * <p>Used for efficient space padding. The length of the string expands as needed.</p> */ - private static String blanks = new String(" "); + private static String spaces = new String(" "); /** * <p>An array of <code>String</code>s used for padding.</p> * - * <p>Used for efficient blank padding. The length of each string expands as needed.</p> + * <p>Used for efficient space padding. The length of each string expands as needed.</p> */ private final static String[] padding = new String[Character.MAX_VALUE]; // String.concat about twice as fast as StringBuffer.append @@ -120,7 +131,7 @@ /** * <p>Removes control characters, including whitespace, from both * ends of this String, handling <code>null</code> by returning - * an empty String.</p> + * an empty String ("").</p> * * <pre> * StringUtils.clean("abc") = "abc" @@ -167,7 +178,7 @@ /** * <p>Removes control characters, including whitespace, from both * ends of this string returning <code>null</code> if the string is - * empty after the trim or if it is <code>null</code>. + * empty ("") after the trim or if it is <code>null</code>. * * <p>The string is trimmed using [EMAIL PROTECTED] String#trim()}.</p> * @@ -192,7 +203,7 @@ /** * <p>Removes control characters, including whitespace, from both * ends of this string returning an empty string ("") if the string - * is empty after the trim or if it is <code>null</code>. + * is empty ("") after the trim or if it is <code>null</code>. * * <p>The string is trimmed using [EMAIL PROTECTED] String#trim()}.</p> * @@ -213,10 +224,11 @@ } /** - * <p>Deletes all 'space' characters from a String.</p> + * <p>Deletes all 'space' characters from a String as defined by + * [EMAIL PROTECTED] Character#isSpace(char)}.</p> * * <p>Spaces are defined as <code>{' ', '\t', '\r', '\n', '\b'}</code> - * in line with the deprecated [EMAIL PROTECTED] Character#isSpace(char)}.</p> + * in line with the deprecated <code>isSpace</code> method.</p> * * @param str the String to delete spaces from, may be null * @return the String without spaces, <code>null</code> if null string input @@ -229,9 +241,7 @@ } /** - * <p>Deletes all whitespaces from a String.</p> - * - * <p>Whitespace is defined by + * <p>Deletes all whitespaces from a String as defined by * [EMAIL PROTECTED] Character#isWhitespace(char)}.</p> * * @param str the String to delete whitespace from, may be null @@ -776,8 +786,8 @@ * <p>Joins the elements of the provided array into a single String * containing the provided list of elements.</p> * - * <p>No delimiter is added before or after the list. A - * <code>null</code> separator is the same as a blank String.</p> + * <p>No delimiter is added before or after the list. + * A <code>null</code> separator is the same as an empty String ("").</p> * * @param array the array of values to join together * @param separator the separator character to use @@ -833,8 +843,8 @@ * <p>Joins the elements of the provided <code>Iterator</code> into * a single String containing the provided elements.</p> * - * <p>No delimiter is added before or after the list. A - * <code>null</code> separator is the same as a blank String.</p> + * <p>No delimiter is added before or after the list. + * A <code>null</code> separator is the same as an empty String ("").</p> * * @param iterator the <code>Iterator</code> of values to join together * @param separator the separator character to use @@ -960,40 +970,47 @@ //-------------------------------------------------------------------------- /** - * <p>Center a String in a larger String of size <code>n</code>.<p> + * <p>Center a String in a larger String of size <code>size</code> + * using the space character (' ').<p> * - * <p>Uses spaces as the value to buffer the String with. - * Equivalent to <code>center(str, size, " ")</code>.</p> + * <p>Equivalent to <code>center(str, size, " ")</code>.</p> * - * @param str String to center - * @param size int size of new String + * @param str the String to center, must not be null + * @param size the int size of new String * @return String containing centered String * @throws NullPointerException if str is <code>null</code> */ public static String center(String str, int size) { - return center(str, size, " "); + int sz = str.length(); + int p = size - sz; + if (p < 1) { + return str; + } + str = leftPad(str, sz + p / 2, ' '); + str = rightPad(str, size, ' '); + return str; } /** - * <p>Center a String in a larger String of size <code>n</code>.</p> + * <p>Center a String in a larger String of size <code>size</code>.</p> * - * <p>Uses a supplied String as the value to buffer the String with.</p> + * <p>Uses a supplied String as the value to pad the String with.</p> * - * @param str String to center - * @param size int size of new String - * @param delim String to buffer the new String with + * @param str the String to center, must not be null + * @param size the int size of new String + * @param padStr the String to pad the new String with, must not be null * @return String containing centered String - * @throws NullPointerException if str or delim is <code>null</code> - * @throws ArithmeticException if delim is the empty String + * @throws NullPointerException if str or padStr is <code>null</code> + * @throws ArithmeticException if padStr is the empty String */ - public static String center(String str, int size, String delim) { + public static String center(String str, int size, String padStr) { int sz = str.length(); int p = size - sz; if (p < 1) { return str; } - str = leftPad(str, sz + p / 2, delim); - str = rightPad(str, size, delim); + str = leftPad(str, sz + p / 2, padStr); + str = rightPad(str, size, padStr); return str; } @@ -1367,69 +1384,120 @@ //-------------------------------------------------------------------------- /** - * <p>Repeat a String <code>n</code> times to form a + * <p>Repeat a String <code>repeat</code> times to form a * new string.</p> * - * @param str String to repeat - * @param repeat number of times to repeat str - * @return String with repeated String - * @throws NegativeArraySizeException if <code>repeat < 0</code> + * <pre> + * StringUtils.repeat("", 0) = "" + * StringUtils.repeat("", 2) = "" + * StringUtils.repeat("a", 3) = "aaa" + * StringUtils.repeat("ab", 2) = "abab" + * StringUtils.repeat(null, 2) = NullPointerException + * StringUtils.repeat("a", -2) = NegativeArraySizeException + * </pre> + * + * @param str the String to repeat, must not be null + * @param repeat number of times to repeat str + * @return a new String consisting of the original String repeated + * @throws NegativeArraySizeException if <code>repeat < 0</code> * @throws NullPointerException if str is <code>null</code> */ public static String repeat(String str, int repeat) { - if (str.length() == 1 && repeat <= PAD_LIMIT) { + int inputLength = str.length(); + if (repeat == 0) { + return ""; + } + if (inputLength == 1 && repeat <= PAD_LIMIT) { return padding(repeat, str.charAt(0)); } - StringBuffer buffer = new StringBuffer(repeat * str.length()); - for (int i = 0; i < repeat; i++) { - buffer.append(str); + char[] input = str.toCharArray(); + char[] output = new char[repeat * inputLength]; + switch (inputLength) { + case 1: + char ch = input[0]; + for (int i = repeat - 1; i >= 0; i--) { + output[i] = ch; + } + break; + case 2: + char ch0 = input[0]; + char ch1 = input[1]; + for (int i = repeat * 2 - 2; i >= 0; i--,i--) { + output[i] = ch0; + output[i + 1] = ch1; + } + break; + default: + for (int i = repeat - 1; i >= 0; i--) { + System.arraycopy(input, 0, output, i * inputLength, inputLength); + } + break; } - return buffer.toString(); + return new String(output); } /** - * <p>Returns blank padding with a given length.</p> + * <p>Returns a string containing the requested number of + * space characters (' ').</p> + * + * <pre> + * StringUtils.padding(0) = "" + * StringUtils.padding(3) = " " + * StringUtils.padding(-2) = IndexOutOfBoundsException + * </pre> * - * @param repeat number of times to repeat a blank - * @return String with repeated character - * @throws IndexOutOfBoundsException if repeat < 0 + * @param repeat number of times to repeat space + * @return a String with <code>repeat</code> spaces + * @throws IndexOutOfBoundsException if <code>repeat < 0</code> */ private static String padding(int repeat) { - while (blanks.length() < repeat) { - blanks = blanks.concat(blanks); + while (spaces.length() < repeat) { + spaces = spaces.concat(spaces); } - return blanks.substring(0, repeat); + return spaces.substring(0, repeat); } /** * <p>Returns padding using the specified delimiter repeated * to a given length.</p> * - * @param repeat number of times to repeat delim - * @param delim character to repeat + * <pre> + * StringUtils.padding(0, 'e') = "" + * StringUtils.padding(3, 'e') = "eee" + * StringUtils.padding(-2, 'e') = IndexOutOfBoundsException + * </pre> + * + * @param repeat number of times to repeat delim + * @param padChar character to repeat * @return String with repeated character - * @throws NullPointerException if delim is <code>null</code> - * @throws IndexOutOfBoundsException if repeat < 0 + * @throws IndexOutOfBoundsException if <code>repeat < 0</code> */ - - private static String padding(int repeat, char delim) { - if (padding[delim] == null) { - padding[delim] = String.valueOf(delim); + private static String padding(int repeat, char padChar) { + if (padding[padChar] == null) { + padding[padChar] = String.valueOf(padChar); } - while (padding[delim].length() < repeat) { - padding[delim] = padding[delim].concat(padding[delim]); + while (padding[padChar].length() < repeat) { + padding[padChar] = padding[padChar].concat(padding[padChar]); } - return padding[delim].substring(0, repeat); + return padding[padChar].substring(0, repeat); } /** - * <p>Right pad a String with spaces.</p> + * <p>Right pad a String with spaces (' ').</p> * - * <p>The String is padded to the size of <code>n</code>.</p> + * <p>The String is padded to the size of <code>size</code>.</p> * - * @param str String to pad out - * @param size number of times to repeat str + * <pre> + * StringUtils.rightPad("bat", 3) = "bat" + * StringUtils.rightPad("bat", 5) = "bat " + * StringUtils.rightPad("bat", 1) = "bat" + * StringUtils.rightPad("bat", -1) = "bat" + * StringUtils.rightPad(null, 1) = NullPointerException + * </pre> + * + * @param str the String to pad out, must not be null + * @param size the size of the returned string, padded on the right * @return right padded String or original String if no padding is necessary * @throws NullPointerException if str is <code>null</code> */ @@ -1441,64 +1509,91 @@ if (pads > PAD_LIMIT) { return rightPad(str, size, ' '); } - return str + padding(pads); + return str.concat(padding(pads)); } /** * <p>Right pad a String with a specified character.</p> * - * <p>The String is padded to the size of <code>n</code>.</p> + * <p>The String is padded to the size of <code>size</code>.</p> + * + * <pre> + * StringUtils.rightPad("bat", 3, 'z') = "bat" + * StringUtils.rightPad("bat", 5, 'z') = "batzz" + * StringUtils.rightPad("bat", 1, 'z') = "bat" + * StringUtils.rightPad("bat", -1, 'z') = "bat" + * StringUtils.rightPad(null, 1, 'z') = NullPointerException + * </pre> * - * @param str String to pad out - * @param size size to pad to - * @param delim character to pad with + * @param str the String to pad out, must not be null + * @param size the size to pad to + * @param padChar the character to pad with * @return right padded String or original String if no padding is necessary - * @throws NullPointerException if str or delim is <code>null<code> + * @throws NullPointerException if str is <code>null<code> */ - public static String rightPad(String str, int size, char delim) { + public static String rightPad(String str, int size, char padChar) { int pads = size - str.length(); if (pads <= 0) { return str; // returns original string when possible } if (pads > PAD_LIMIT) { - return rightPad(str, size, String.valueOf(delim)); + return rightPad(str, size, String.valueOf(padChar)); } - return str + padding(pads, delim); + return str.concat(padding(pads, padChar)); } /** * <p>Right pad a String with a specified string.</p> * - * <p>The String is padded to the size of <code>n</code>.</p> + * <p>The String is padded to the size of <code>size</code>.</p> * - * @param str String to pad out - * @param size size to pad to - * @param delim String to pad with + * <pre> + * StringUtils.rightPad("bat", 3, "yz") = "bat" + * StringUtils.rightPad("bat", 5, "yz") = "batyz" + * StringUtils.rightPad("bat", 8, "yz") = "batyzyzy" + * StringUtils.rightPad("bat", 1, "yz") = "bat" + * StringUtils.rightPad("bat", -1, "yz") = "bat" + * StringUtils.rightPad(null, 1, "yz") = NullPointerException + * StringUtils.rightPad("bat", 1, null) = NullPointerException + * StringUtils.rightPad("bat", 1, "") = ArithmeticException + * </pre> + * + * @param str the String to pad out, must not be null + * @param size the size to pad to + * @param padStr the String to pad with, must not be null * @return right padded String or original String if no padding is necessary - * @throws NullPointerException if str or delim is <code>null<code> - * @throws ArithmeticException if delim is the empty String + * @throws NullPointerException if str or padStr is <code>null<code> + * @throws ArithmeticException if padStr is the empty String */ - public static String rightPad(String str, int size, String delim) { - if (delim.length() == 1 && size - str.length() <= PAD_LIMIT) { - return rightPad(str, size, delim.charAt(0)); + public static String rightPad(String str, int size, String padStr) { + if (padStr.length() == 1 && size - str.length() <= PAD_LIMIT) { + return rightPad(str, size, padStr.charAt(0)); } - size = (size - str.length()) / delim.length(); + size = (size - str.length()) / padStr.length(); if (size > 0) { - str += repeat(delim, size); + str += repeat(padStr, size); } return str; } /** - * <p>Left pad a String with spaces.</p> + * <p>Left pad a String with spaces (' ').</p> * - * <p>The String is padded to the size of <code>n<code>.</p> + * <p>The String is padded to the size of <code>size<code>.</p> + * + * <pre> + * StringUtils.leftPad("bat", 3) = "bat" + * StringUtils.leftPad("bat", 5) = " bat" + * StringUtils.leftPad("bat", 1) = "bat" + * StringUtils.leftPad("bat", -1) = "bat" + * StringUtils.leftPad(null, 1) = NullPointerException + * </pre> * - * @param str String to pad out - * @param size size to pad to + * @param str the String to pad out, must not be null + * @param size the size to pad to * @return left padded String or original String if no padding is necessary - * @throws NullPointerException if str or delim is <code>null<code> + * @throws NullPointerException if str is <code>null<code> */ public static String leftPad(String str, int size) { int pads = size - str.length(); @@ -1514,15 +1609,23 @@ /** * <p>Left pad a String with a specified character.</p> * - * <p>Pad to a size of <code>n</code>.</p> + * <p>Pad to a size of <code>size</code>.</p> * - * @param str String to pad out - * @param size size to pad to - * @param delim character to pad with + * <pre> + * StringUtils.leftPad("bat", 3, 'z') = "bat" + * StringUtils.leftPad("bat", 5, 'z') = "zzbat" + * StringUtils.leftPad("bat", 1, 'z') = "bat" + * StringUtils.leftPad("bat", -1, 'z') = "bat" + * StringUtils.leftPad(null, 1, 'z') = NullPointerException + * </pre> + * + * @param str the String to pad out, must not be null + * @param size the size to pad to + * @param padChar the character to pad with * @return left padded String or original String if no padding is necessary * @throws NullPointerException if str or delim is <code>null</code> */ - public static String leftPad(String str, int size, char delim) { + public static String leftPad(String str, int size, char padChar) { int pads = size - str.length(); if (pads <= 0) { return str; // returns original string when possible @@ -1530,27 +1633,38 @@ if (pads > PAD_LIMIT) { return leftPad(str, size, ' '); } - return padding(pads, delim).concat(str); + return padding(pads, padChar).concat(str); } /** * <p>Left pad a String with a specified string.</p> * - * <p>Pad to a size of <code>n</code>.</p> + * <p>Pad to a size of <code>size</code>.</p> + * + * <pre> + * StringUtils.leftPad("bat", 3, "yz") = "bat" + * StringUtils.leftPad("bat", 5, "yz") = "yzbat" + * StringUtils.leftPad("bat", 8, "yz") = "yzyzybat" + * StringUtils.leftPad("bat", 1, "yz") = "bat" + * StringUtils.leftPad("bat", -1, "yz") = "bat" + * StringUtils.leftPad(null, 1, "yz") = NullPointerException + * StringUtils.leftPad("bat", 1, null) = NullPointerException + * StringUtils.leftPad("bat", 1, "") = ArithmeticException + * </pre> * - * @param str String to pad out - * @param size size to pad to - * @param delim String to pad with + * @param str the String to pad out, must not be null + * @param size the size to pad to + * @param padStr the String to pad with * @return left padded String or original String if no padding is necessary * @throws NullPointerException if str or delim is null * @throws ArithmeticException if delim is the empty string */ - public static String leftPad(String str, int size, String delim) { - if (delim.length() == 1 && size - str.length() <= PAD_LIMIT) - return leftPad(str, size, delim.charAt(0)); - size = (size - str.length()) / delim.length(); + public static String leftPad(String str, int size, String padStr) { + if (padStr.length() == 1 && size - str.length() <= PAD_LIMIT) + return leftPad(str, size, padStr.charAt(0)); + size = (size - str.length()) / padStr.length(); if (size > 0) { - str = repeat(delim, size) + str; + str = repeat(padStr, size) + str; } return str; } @@ -1937,7 +2051,7 @@ * <p>Checks if the String contains only unicode letters.</p> * * <p><code>null</code> will return <code>false</code>. - * An empty String will return <code>true</code>.</p> + * An empty String ("") will return <code>true</code>.</p> * * @param str the String to check * @return <code>true</code> if only contains letters, and is non-null @@ -1958,8 +2072,8 @@ /** * <p>Checks if the String contains only whitespace.</p> * - * <p><code>null</code> will return <code>false</code>. An - * empty String will return <code>true</code>.</p> + * <p><code>null</code> will return <code>false</code>. + * An empty String ("") will return <code>true</code>.</p> * * @param str the String to check * @return <code>true</code> if only contains whitespace, and is non-null @@ -1979,10 +2093,10 @@ /** * <p>Checks if the String contains only unicode letters and - * space (<code>' '</code>).</p> + * space (' ').</p> * - * <p><code>null</code> will return <code>false</code>. An - * empty String will return <code>true</code>.</p> + * <p><code>null</code> will return <code>false</code> + * An empty String ("") will return <code>true</code>.</p> * * @param str the String to check * @return <code>true</code> if only contains letters and space, @@ -2005,8 +2119,8 @@ /** * <p>Checks if the String contains only unicode letters or digits.</p> * - * <p><code>null</code> will return <code>false</code>. An empty - * String will return <code>true</code>.</p> + * <p><code>null</code> will return <code>false</code>. + * An empty String ("") will return <code>true</code>.</p> * * @param str the String to check * @return <code>true</code> if only contains letters or digits, @@ -2029,8 +2143,8 @@ * <p>Checks if the String contains only unicode letters, digits * or space (<code>' '</code>).</p> * - * <p><code>null</code> will return <code>false</code>. An empty - * String will return <code>true</code>.</p> + * <p><code>null</code> will return <code>false</code>. + * An empty String ("") will return <code>true</code>.</p> * * @param str the String to check * @return <code>true</code> if only contains letters, digits or space, @@ -2054,7 +2168,7 @@ * <p>Checks if the String contains only unicode digits.</p> * * <p><code>null</code> will return <code>false</code>. - * An empty String will return <code>true</code>.</p> + * An empty String ("") will return <code>true</code>.</p> * * @param str the String to check * @return <code>true</code> if only contains digits, and is non-null @@ -2076,8 +2190,8 @@ * <p>Checks if the String contains only unicode digits or space * (<code>' '</code>).</p> * - * <p><code>null</code> will return <code>false</code>. An empty - * String will return <code>true</code>.</p> + * <p><code>null</code> will return <code>false</code>. + * An empty String ("") will return <code>true</code>.</p> * * @param str the String to check * @return <code>true</code> if only contains digits or space, @@ -2244,16 +2358,60 @@ //-------------------------------------------------------------------------- /** + * <p>Returns either the passed in String, + * or if the String is <code>null</code>, an empty String ("").</p> + * + * <pre> + * StringUtils.defaultString(null) = "" + * StringUtils.defaultString("") = "" + * StringUtils.defaultString("bat") = "bat" + * </pre> + * + * @param str the String to check, may be null + * @return the passed in String, or the empty string if it + * was <code>null</code> + */ + public static String defaultString(String str) { + return (str == null ? "" : str); + } + + /** * <p>Returns either the passed in <code>Object</code> as a String, - * or, if the <code>Object</code> is <code>null</code>, an empty - * String.</p> + * or, if the <code>Object</code> is <code>null</code>, + * an empty String ("").</p> * - * @param obj the Object to check - * @return the passed in Object's toString, or blank if it was - * <code>null</code> + * <pre> + * StringUtils.defaultString(null) = "null" + * StringUtils.defaultString("") = "" + * StringUtils.defaultString("bat") = "bat" + * StringUtils.defaultString(Boolean.TRUE) = "true" + * </pre> + * + * @param obj the Object to check, using <code>toString()</code>, may be null + * @return the passed in Object's toString, or the empty string if it + * was <code>null</code> */ public static String defaultString(Object obj) { - return defaultString(obj, ""); + return (obj == null ? "" : obj.toString()); + } + + /** + * <p>Returns either the passed in String, + * or if the String is <code>null</code>, an empty String ("").</p> + * + * <pre> + * StringUtils.defaultString(null, "null") = "null" + * StringUtils.defaultString("", "null") = "" + * StringUtils.defaultString("bat", "null") = "bat" + * </pre> + * + * @param str the String to check, may be null + * @param defaultStr the default String to return + * if the input is <code>null</code>, may be null + * @return the passed in String, or the default if it was <code>null</code> + */ + public static String defaultString(String str, String defaultStr) { + return (str == null ? defaultStr : str); } /** @@ -2261,14 +2419,20 @@ * or, if the <code>Object</code> is <code>null</code>, a passed * in default String.</p> * - * @param obj the Object to check - * @param defaultString the default String to return if str is - * <code>null</code> - * @return the passed in string, or the default if it was - * <code>null</code> + * <pre> + * StringUtils.defaultString(null, "null") = "null" + * StringUtils.defaultString("", "null") = "" + * StringUtils.defaultString("bat", "null") = "bat" + * StringUtils.defaultString(Boolean.TRUE, "null") = "true" + * </pre> + * + * @param obj the Object to check, using <code>toString()</code>, may be null + * @param defaultStr the default String to return + * if the input is <code>null</code>, may be null + * @return the passed in Object's toString, or the default if it was <code>null</code> */ - public static String defaultString(Object obj, String defaultString) { - return (obj == null) ? defaultString : obj.toString(); + public static String defaultString(Object obj, String defaultStr) { + return (obj == null ? defaultStr : obj.toString()); } // Reversing @@ -2279,8 +2443,14 @@ * * <p><code>null</code> String returns <code>null</code>.</p> * - * @param str the String to reverse - * @return the reversed String + * <pre> + * StringUtils.reverse(null) = null + * StringUtils.reverse("") = "" + * StringUtils.reverse("bat") = "tab" + * </pre> + * + * @param str the String to reverse, may be null + * @return the reversed String, <code>null</code> if null string input */ public static String reverse(String str) { if (str == null) { @@ -2296,8 +2466,8 @@ * Thus java.lang.String becomes String.lang.java (if the delimiter * is <code>'.'</code>).</p> * - * @param str the String to reverse - * @param delimiter the delimiter to use + * @param str the String to reverse + * @param delimiter the delimiter to use * @return the reversed String */ public static String reverseDelimitedString(String str, String delimiter) { @@ -2372,10 +2542,11 @@ * (More precisely, return the remainder of the second string, * starting from where it's different from the first.)</p> * - * <p> - * For example, <code>difference("i am a machine", "i am a robot") -> "robot"</code> + * <p>For example, + * <code>difference("i am a machine", "i am a robot") -> "robot"</code>.</p> * - * @return the portion of s2 where it differs from s1; returns the empty string ("") if they are equal + * @return the portion of s2 where it differs from s1; returns the + * empty string if they are equal */ public static String difference(String s1, String s2) { int at = differenceAt(s1, s2); @@ -2386,9 +2557,11 @@ } /** - * <p>Compare two strings, and return the index at which the strings begin to differ.</p> + * <p>Compare two strings, and return the index at which the + * strings begin to differ.</p> * - * <p>For example, <code>differenceAt("i am a machine", "i am a robot") -> 7</code></p> + * <p>For example, + * <code>differenceAt("i am a machine", "i am a robot") -> 7</code></p> * * @return the index where s2 and s1 begin to differ; -1 if they are equal */
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]