scolebourne 2003/07/20 03:29:22 Modified: lang/src/test/org/apache/commons/lang StringUtilsTest.java lang/src/java/org/apache/commons/lang StringUtils.java Log: Add new method center(String, int, char) to complete API Rework padding internals Example javadoc difference()/differenceAt() Remove dependency on NumberUtils Revision Changes Path 1.32 +225 -186 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.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- StringUtilsTest.java 20 Jul 2003 00:17:29 -0000 1.31 +++ StringUtilsTest.java 20 Jul 2003 10:29:21 -0000 1.32 @@ -279,7 +279,7 @@ assertEquals("a", res[0]); } - public void testSplit() { + public void testSplit_StringString_StringStringInt() { assertEquals(null, StringUtils.split(null, ".")); assertEquals(null, StringUtils.split(null, ".", 3)); @@ -298,47 +298,43 @@ } private void innerTestSplit(char separator, String sepStr, char noMatch) { - try { - final String str = "a" + separator + "b" + separator + separator + noMatch + "c"; - String[] res; - // (str, sepStr) - res = StringUtils.split(str, sepStr); - assertEquals(3, res.length); - assertEquals("a", res[0]); - assertEquals("b", res[1]); - assertEquals(noMatch + "c", res[2]); - - final String str2 = separator + "a" + separator; - res = StringUtils.split(str2, sepStr); - assertEquals(1, res.length); - assertEquals("a", res[0]); - - res = StringUtils.split(str, sepStr, -1); - assertEquals(3, res.length); - assertEquals("a", res[0]); - assertEquals("b", res[1]); - assertEquals(noMatch + "c", res[2]); - - res = StringUtils.split(str, sepStr, 0); - assertEquals(3, res.length); - assertEquals("a", res[0]); - assertEquals("b", res[1]); - assertEquals(noMatch + "c", res[2]); - - res = StringUtils.split(str, sepStr, 1); - assertEquals(1, res.length); - assertEquals(str, res[0]); - - res = StringUtils.split(str, sepStr, 2); - assertEquals(2, res.length); - assertEquals("a", res[0]); - assertEquals(str.substring(2), res[1]); - - } catch (AssertionFailedError ex) { - System.out.println("Failed on separator hex(" + Integer.toHexString(separator) + - "), noMatch hex(" + Integer.toHexString(noMatch) + "), sepStr(" + sepStr + ")"); - throw ex; - } + String msg = "Failed on separator hex(" + Integer.toHexString(separator) + + "), noMatch hex(" + Integer.toHexString(noMatch) + "), sepStr(" + sepStr + ")"; + + final String str = "a" + separator + "b" + separator + separator + noMatch + "c"; + String[] res; + // (str, sepStr) + res = StringUtils.split(str, sepStr); + assertEquals(msg, 3, res.length); + assertEquals(msg, "a", res[0]); + assertEquals(msg, "b", res[1]); + assertEquals(msg, noMatch + "c", res[2]); + + final String str2 = separator + "a" + separator; + res = StringUtils.split(str2, sepStr); + assertEquals(msg, 1, res.length); + assertEquals(msg, "a", res[0]); + + res = StringUtils.split(str, sepStr, -1); + assertEquals(msg, 3, res.length); + assertEquals(msg, "a", res[0]); + assertEquals(msg, "b", res[1]); + assertEquals(msg, noMatch + "c", res[2]); + + res = StringUtils.split(str, sepStr, 0); + assertEquals(msg, 3, res.length); + assertEquals(msg, "a", res[0]); + assertEquals(msg, "b", res[1]); + assertEquals(msg, noMatch + "c", res[2]); + + res = StringUtils.split(str, sepStr, 1); + assertEquals(msg, 1, res.length); + assertEquals(msg, str, res[0]); + + res = StringUtils.split(str, sepStr, 2); + assertEquals(msg, 2, res.length); + assertEquals(msg, "a", res[0]); + assertEquals(msg, str.substring(2), res[1]); } public void testDeleteSpace_String() { @@ -433,7 +429,7 @@ } catch (IndexOutOfBoundsException ex) {} } - public void testRepeat() { + public void testRepeat_StringInt() { assertEquals(null, StringUtils.repeat(null, 2)); assertEquals("", StringUtils.repeat("ab", 0)); assertEquals("", StringUtils.repeat("", 3)); @@ -442,46 +438,6 @@ assertEquals("abcabcabc", StringUtils.repeat("abc", 3)); } - public void testCenter() { - assertEquals(null, StringUtils.center(null, -1)); - assertEquals(null, StringUtils.center(null, 4)); - assertEquals("ab", StringUtils.center("ab", 0)); - assertEquals("ab", StringUtils.center("ab", -1)); - assertEquals("ab", StringUtils.center("ab", 1)); - assertEquals(" ", StringUtils.center("", 4)); - assertEquals(" ab ", StringUtils.center("ab", 4)); - assertEquals("abcd", StringUtils.center("abcd", 2)); - assertEquals(" a ", StringUtils.center("a", 4)); - assertEquals(" a ", StringUtils.center("a", 5)); - - assertEquals(null, StringUtils.center(null, -1, " ")); - assertEquals(null, StringUtils.center(null, 4, " ")); - assertEquals("ab", StringUtils.center("ab", 0, " ")); - assertEquals("ab", StringUtils.center("ab", -1, " ")); - assertEquals("ab", StringUtils.center("ab", 1, " ")); - assertEquals(" ", StringUtils.center("", 4, " ")); - assertEquals(" ab ", StringUtils.center("ab", 4, " ")); - assertEquals("abcd", StringUtils.center("abcd", 2, " ")); - assertEquals(" a ", StringUtils.center("a", 4, " ")); - assertEquals("yayz", StringUtils.center("a", 4, "yz")); - assertEquals("yzyayzy", StringUtils.center("a", 7, "yz")); - try { - StringUtils.center(null, 4, null); - fail(); - } catch (IllegalArgumentException ex) { - } - try { - StringUtils.center("abc", 4, null); - fail(); - } catch (IllegalArgumentException ex) { - } - try { - StringUtils.center("abc", 4, ""); - fail(); - } catch (IllegalArgumentException ex) { - } - } - public void testDeprecatedChompFunctions() { assertEquals("chompLast(String) failed", FOO, StringUtils.chompLast(FOO + "\n") ); @@ -613,147 +569,213 @@ } - public void testPadFunctions() { - assertEquals(null, StringUtils.rightPad (null, 8) ); - assertEquals("1234 ", StringUtils.rightPad ("1234", 8) ); - - assertEquals(null, StringUtils.rightPad (null, 8, "-+") ); - assertEquals("1234-+-+", StringUtils.rightPad ("1234", 8, "-+") ); - assertEquals("123456-+~", StringUtils.rightPad ("123456", 9, "-+~") ); - assertEquals("123456-+", StringUtils.rightPad ("123456", 8, "-+~") ); + //----------------------------------------------------------------------- + public void testRightPad_StringInt() { + assertEquals(null, StringUtils.rightPad(null, 5)); + assertEquals(" ", StringUtils.rightPad("", 5)); + assertEquals("abc ", StringUtils.rightPad("abc", 5)); + assertEquals("abc", StringUtils.rightPad("abc", 2)); + assertEquals("abc", StringUtils.rightPad("abc", -1)); + } + + public void testRightPad_StringIntChar() { + assertEquals(null, StringUtils.rightPad(null, 5, ' ')); + assertEquals(" ", StringUtils.rightPad("", 5, ' ')); + assertEquals("abc ", StringUtils.rightPad("abc", 5, ' ')); + assertEquals("abc", StringUtils.rightPad("abc", 2, ' ')); + assertEquals("abc", StringUtils.rightPad("abc", -1, ' ')); + assertEquals("abcxx", StringUtils.rightPad("abc", 5, 'x')); + } + + public void testRightPad_StringIntString() { + assertEquals(null, StringUtils.rightPad(null, 5, "-+")); + assertEquals(" ", StringUtils.rightPad("", 5, " ")); + assertEquals(null, StringUtils.rightPad(null, 8, null)); + assertEquals("abc-+-+", StringUtils.rightPad("abc", 7, "-+")); + assertEquals("abc-+~", StringUtils.rightPad("abc", 6, "-+~")); + assertEquals("abc-+", StringUtils.rightPad("abc", 5, "-+~")); + assertEquals("abc", StringUtils.rightPad("abc", 2, " ")); + assertEquals("abc", StringUtils.rightPad("abc", -1, " ")); try { - StringUtils.rightPad(null, 6, null); + StringUtils.rightPad("abc56", 6, null); fail(); } catch (IllegalArgumentException ex) {} try { - StringUtils.rightPad("123456", 6, null); - fail(); - } catch (IllegalArgumentException ex) {} - try { - StringUtils.rightPad("123456", 6, ""); + StringUtils.rightPad("abc56", 6, ""); fail(); } catch (IllegalArgumentException ex) {} + } - assertEquals(null, StringUtils.leftPad (null, 8) ); - assertEquals(" 1234", StringUtils.leftPad("1234", 8) ); + //----------------------------------------------------------------------- + public void testLeftPad_StringInt() { + assertEquals(null, StringUtils.leftPad(null, 5)); + assertEquals(" ", StringUtils.leftPad("", 5)); + assertEquals(" abc", StringUtils.leftPad("abc", 5)); + assertEquals("abc", StringUtils.leftPad("abc", 2)); + } + + public void testLeftPad_StringIntChar() { + assertEquals(null, StringUtils.leftPad(null, 5, ' ')); + assertEquals(" ", StringUtils.leftPad("", 5, ' ')); + assertEquals(" abc", StringUtils.leftPad("abc", 5, ' ')); + assertEquals("xxabc", StringUtils.leftPad("abc", 5, 'x')); + assertEquals("abc", StringUtils.leftPad("abc", 2, ' ')); + } - assertEquals(null, StringUtils.leftPad (null, 8, "-+") ); - assertEquals("-+-+1234", StringUtils.leftPad("1234", 8, "-+") ); - assertEquals("-+~123456", StringUtils.leftPad("123456", 9, "-+~") ); - assertEquals("-+123456", StringUtils.leftPad("123456", 8, "-+~") ); + public void testLeftPad_StringIntString() { + assertEquals(null, StringUtils.leftPad(null, 5, "-+")); + assertEquals(null, StringUtils.leftPad(null, 5, null)); + assertEquals(" ", StringUtils.leftPad("", 5, " ")); + assertEquals("-+-+abc", StringUtils.leftPad("abc", 7, "-+")); + assertEquals("-+~abc", StringUtils.leftPad("abc", 6, "-+~")); + assertEquals("-+abc", StringUtils.leftPad("abc", 5, "-+~")); + assertEquals("abc", StringUtils.leftPad("abc", 2, " ")); + assertEquals("abc", StringUtils.leftPad("abc", -1, " ")); try { - StringUtils.leftPad(null, 6, null); + StringUtils.leftPad("abc56", 6, null); fail(); } catch (IllegalArgumentException ex) {} try { - StringUtils.leftPad("123456", 6, null); + StringUtils.leftPad("abc56", 6, ""); fail(); } catch (IllegalArgumentException ex) {} + } + + //----------------------------------------------------------------------- + public void testCenter_StringInt() { + assertEquals(null, StringUtils.center(null, -1)); + assertEquals(null, StringUtils.center(null, 4)); + assertEquals(" ", StringUtils.center("", 4)); + assertEquals("ab", StringUtils.center("ab", 0)); + assertEquals("ab", StringUtils.center("ab", -1)); + assertEquals("ab", StringUtils.center("ab", 1)); + assertEquals(" ", StringUtils.center("", 4)); + assertEquals(" ab ", StringUtils.center("ab", 4)); + assertEquals("abcd", StringUtils.center("abcd", 2)); + assertEquals(" a ", StringUtils.center("a", 4)); + assertEquals(" a ", StringUtils.center("a", 5)); + } + + public void testCenter_StringIntChar() { + assertEquals(null, StringUtils.center(null, -1, ' ')); + assertEquals(null, StringUtils.center(null, 4, ' ')); + assertEquals(" ", StringUtils.center("", 4, ' ')); + assertEquals("ab", StringUtils.center("ab", 0, ' ')); + assertEquals("ab", StringUtils.center("ab", -1, ' ')); + assertEquals("ab", StringUtils.center("ab", 1, ' ')); + assertEquals(" ", StringUtils.center("", 4, ' ')); + assertEquals(" ab ", StringUtils.center("ab", 4, ' ')); + assertEquals("abcd", StringUtils.center("abcd", 2, ' ')); + assertEquals(" a ", StringUtils.center("a", 4, ' ')); + assertEquals(" a ", StringUtils.center("a", 5, ' ')); + assertEquals("xxaxx", StringUtils.center("a", 5, 'x')); + } + + public void testCenter_StringIntString() { + assertEquals(null, StringUtils.center(null, 4, null)); + assertEquals(null, StringUtils.center(null, -1, " ")); + assertEquals(null, StringUtils.center(null, 4, " ")); + assertEquals(" ", StringUtils.center("", 4, " ")); + assertEquals("ab", StringUtils.center("ab", 0, " ")); + assertEquals("ab", StringUtils.center("ab", -1, " ")); + assertEquals("ab", StringUtils.center("ab", 1, " ")); + assertEquals(" ", StringUtils.center("", 4, " ")); + assertEquals(" ab ", StringUtils.center("ab", 4, " ")); + assertEquals("abcd", StringUtils.center("abcd", 2, " ")); + assertEquals(" a ", StringUtils.center("a", 4, " ")); + assertEquals("yayz", StringUtils.center("a", 4, "yz")); + assertEquals("yzyayzy", StringUtils.center("a", 7, "yz")); try { - StringUtils.leftPad("123456", 6, ""); + StringUtils.center("abc", 4, null); fail(); - } catch (IllegalArgumentException ex) {} + } catch (IllegalArgumentException ex) { + } + try { + StringUtils.center("abc", 4, ""); + fail(); + } catch (IllegalArgumentException ex) { + } } - public void testReverse() { + //----------------------------------------------------------------------- + public void testReverse_String() { assertEquals(null, StringUtils.reverse(null) ); - assertEquals("sdrawkcab", StringUtils.reverse("backwards") ); assertEquals("", StringUtils.reverse("") ); + assertEquals("sdrawkcab", StringUtils.reverse("backwards") ); } - public void testReverseDelimitedString() { + public void testReverseDelimitedString_StringChar() { assertEquals(null, StringUtils.reverseDelimitedString(null, '.') ); + assertEquals("", StringUtils.reverseDelimitedString("", '.') ); assertEquals("c.b.a", StringUtils.reverseDelimitedString("a.b.c", '.') ); assertEquals("a b c", StringUtils.reverseDelimitedString("a b c", '.') ); assertEquals("", StringUtils.reverseDelimitedString("", '.') ); + } + public void testReverseDelimitedString_StringString() { assertEquals(null, StringUtils.reverseDelimitedString(null, null) ); + assertEquals("", StringUtils.reverseDelimitedString("", null) ); + assertEquals("", StringUtils.reverseDelimitedString("", ".") ); assertEquals("a.b.c", StringUtils.reverseDelimitedString("a.b.c", null) ); assertEquals("c b a", StringUtils.reverseDelimitedString("a b c", null) ); - assertEquals("org.apache.test", - StringUtils.reverseDelimitedString("test.apache.org", ".") ); - assertEquals("reverseDelimitedString(empty-string,'.') failed", - "", - StringUtils.reverseDelimitedString("", ".") ); - assertEquals("reverseDelimitedString(String,' ') failed", - "once upon a time", - StringUtils.reverseDelimitedString("time a upon once"," ") ); + assertEquals("c.b.a", StringUtils.reverseDelimitedString("a.b.c", ".") ); } - public void testDefaultFunctions() { + //----------------------------------------------------------------------- + public void testDefault_String() { assertEquals("", StringUtils.defaultString(null) ); assertEquals("", StringUtils.defaultString("") ); - assertEquals(FOO, StringUtils.defaultString(FOO) ); - - assertEquals(BAR, StringUtils.defaultString(null, BAR) ); - assertEquals("", StringUtils.defaultString("", BAR) ); - assertEquals(FOO, StringUtils.defaultString(FOO, BAR) ); - - assertEquals("", StringUtils.defaultString((Object) "") ); - assertEquals(FOO, StringUtils.defaultString((Object) FOO) ); + assertEquals("abc", StringUtils.defaultString("abc") ); + } + + public void testDefault_StringString() { + assertEquals("xyz", StringUtils.defaultString(null, "xyz") ); + assertEquals("", StringUtils.defaultString("", "xyz") ); + assertEquals("abc", StringUtils.defaultString("abc", "xyz") ); + } + + public void testDefault_Object() { assertEquals("", StringUtils.defaultString((Object) null) ); - - assertEquals("", StringUtils.defaultString((Object) "", BAR) ); - assertEquals(FOO, StringUtils.defaultString((Object) FOO, BAR) ); + assertEquals(Boolean.TRUE.toString(), StringUtils.defaultString(Boolean.TRUE) ); + } + + public void testDefault_ObjectString() { assertEquals(BAR, StringUtils.defaultString((Object) null, BAR) ); assertEquals(Boolean.TRUE.toString(), StringUtils.defaultString(Boolean.TRUE, BAR) ); } - public void testEscapeFunctions() { - assertEquals("escape(empty-string) failed", - "", StringUtils.escape("") ); - assertEquals("escape(String) failed", - FOO, StringUtils.escape(FOO) ); - assertEquals("escape(String) failed", - "\\t", StringUtils.escape("\t") ); - assertEquals("escape(String) failed", - "\\\\", StringUtils.escape("\\") ); - assertEquals("escape(String) failed", - "\\\\\\b\\t\\r", StringUtils.escape("\\\b\t\r") ); - assertEquals("escape(String) failed", - "\\u1234", StringUtils.escape("\u1234") ); - assertEquals("escape(String) failed", - "\\u0234", StringUtils.escape("\u0234") ); - assertEquals("escape(String) failed", - "\\u00FD", StringUtils.escape("\u00fd") ); - } - - public void testGetLevenshteinDistance() { - assertEquals("getLevenshteinDistance(empty-string, empty-string) failed", - 0, StringUtils.getLevenshteinDistance("", "") ); - assertEquals("getLevenshteinDistance(empty-string, String) failed", - 1, StringUtils.getLevenshteinDistance("", "a") ); - assertEquals("getLevenshteinDistance(String, empty-string) failed", - 7, StringUtils.getLevenshteinDistance("aaapppp", "") ); - assertEquals("getLevenshteinDistance(String, String) failed", - 1, StringUtils.getLevenshteinDistance("frog", "fog") ); - assertEquals("getLevenshteinDistance(String, String) failed", - 3, StringUtils.getLevenshteinDistance("fly", "ant") ); - assertEquals("getLevenshteinDistance(String, String) failed", - 7, StringUtils.getLevenshteinDistance("elephant", "hippo") ); - assertEquals("getLevenshteinDistance(String, String) failed", - 7, StringUtils.getLevenshteinDistance("hippo", "elephant") ); - assertEquals("getLevenshteinDistance(String, String) failed", - 1, StringUtils.getLevenshteinDistance("hello", "hallo") ); + //----------------------------------------------------------------------- + public void testEscapeFunctions_String() { + assertEquals("", StringUtils.escape("") ); + assertEquals("abc", StringUtils.escape("abc") ); + assertEquals("\\t", StringUtils.escape("\t") ); + assertEquals("\\\\", StringUtils.escape("\\") ); + assertEquals("\\\\\\b\\t\\r", StringUtils.escape("\\\b\t\r") ); + assertEquals("\\u1234", StringUtils.escape("\u1234") ); + assertEquals("\\u0234", StringUtils.escape("\u0234") ); + assertEquals("\\u00FD", StringUtils.escape("\u00fd") ); } - public void testAbbreviate() { + //----------------------------------------------------------------------- + public void testAbbreviate_StringInt() { assertEquals(null, StringUtils.abbreviate(null, 10)); - assertEquals("abbreviate(String,int) failed", - "short", StringUtils.abbreviate("short", 10)); - assertEquals("abbreviate(String,int) failed", - "Now is ...", StringUtils.abbreviate("Now is the time for all good men to come to the aid of their party.", 10)); + assertEquals("", StringUtils.abbreviate("", 10)); + assertEquals("short", StringUtils.abbreviate("short", 10)); + assertEquals("Now is ...", StringUtils.abbreviate("Now is the time for all good men to come to the aid of their party.", 10)); String raspberry = "raspberry peach"; - assertEquals("abbreviate(String,int) failed (one past limit)", - "raspberry p...", StringUtils.abbreviate(raspberry, 14)); - assertEquals("abbreviate(String,int) (at limit)", - "raspberry peach", StringUtils.abbreviate("raspberry peach", 15)); - assertEquals("abbreviate(String,int) (one below limit)", - "raspberry peach", StringUtils.abbreviate("raspberry peach", 16)); + assertEquals("raspberry p...", StringUtils.abbreviate(raspberry, 14)); + assertEquals("raspberry peach", StringUtils.abbreviate("raspberry peach", 15)); + assertEquals("raspberry peach", StringUtils.abbreviate("raspberry peach", 16)); + } + + public void testAbbreviate_StringIntInt() { + assertEquals(null, StringUtils.abbreviate(null, 10, 12)); + assertEquals("", StringUtils.abbreviate("", 0, 10)); + assertEquals("", StringUtils.abbreviate("", 2, 10)); - assertEquals("abbreviate(String,int,int) failed", - "raspberry peach", StringUtils.abbreviate(raspberry, 11, 15)); + String raspberry = "raspberry peach"; + assertEquals("raspberry peach", StringUtils.abbreviate(raspberry, 11, 15)); assertEquals(null, StringUtils.abbreviate(null, 7, 14)); assertAbbreviateWithOffset("abcdefg...", -1, 10); @@ -776,11 +798,9 @@ assertAbbreviateWithOffset("...ijklmno", 15, 10); assertAbbreviateWithOffset("...ijklmno", 16, 10); assertAbbreviateWithOffset("...ijklmno", Integer.MAX_VALUE, 10); - } - private void assertAbbreviateWithOffset(String expected, int offset, int maxWidth) - { + private void assertAbbreviateWithOffset(String expected, int offset, int maxWidth) { String abcdefghijklmno = "abcdefghijklmno"; String message = "abbreviate(String,int,int) failed"; String actual = StringUtils.abbreviate(abcdefghijklmno, offset, maxWidth); @@ -793,22 +813,41 @@ assertEquals(message, expected, actual); } - public void testDifference() { + //----------------------------------------------------------------------- + public void testDifference_StringString() { assertEquals(null, StringUtils.difference(null, null)); + assertEquals("", StringUtils.difference("", "")); + assertEquals("abc", StringUtils.difference("", "abc")); + assertEquals("", StringUtils.difference("abc", "")); assertEquals("i am a robot", StringUtils.difference(null, "i am a robot")); assertEquals("i am a machine", StringUtils.difference("i am a machine", null)); assertEquals("robot", StringUtils.difference("i am a machine", "i am a robot")); - assertEquals("", StringUtils.difference("foo", "foo")); + assertEquals("", StringUtils.difference("abc", "abc")); assertEquals("you are a robot", StringUtils.difference("i am a robot", "you are a robot")); } - public void testDifferenceAt() { + public void testDifferenceAt_StringString() { assertEquals(-1, StringUtils.differenceAt(null, null)); assertEquals(0, StringUtils.differenceAt(null, "i am a robot")); + assertEquals(-1, StringUtils.differenceAt("", "")); + assertEquals(0, StringUtils.differenceAt("", "abc")); + assertEquals(0, StringUtils.differenceAt("abc", "")); assertEquals(0, StringUtils.differenceAt("i am a machine", null)); assertEquals(7, StringUtils.differenceAt("i am a machine", "i am a robot")); assertEquals(-1, StringUtils.differenceAt("foo", "foo")); assertEquals(0, StringUtils.differenceAt("i am a robot", "you are a robot")); + } + + //----------------------------------------------------------------------- + public void testGetLevenshteinDistance_StringString() { + assertEquals(0, StringUtils.getLevenshteinDistance("", "") ); + assertEquals(1, StringUtils.getLevenshteinDistance("", "a") ); + assertEquals(7, StringUtils.getLevenshteinDistance("aaapppp", "") ); + assertEquals(1, StringUtils.getLevenshteinDistance("frog", "fog") ); + assertEquals(3, StringUtils.getLevenshteinDistance("fly", "ant") ); + assertEquals(7, StringUtils.getLevenshteinDistance("elephant", "hippo") ); + assertEquals(7, StringUtils.getLevenshteinDistance("hippo", "elephant") ); + assertEquals(1, StringUtils.getLevenshteinDistance("hello", "hallo") ); } } 1.71 +95 -73 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.70 retrieving revision 1.71 diff -u -r1.70 -r1.71 --- StringUtils.java 20 Jul 2003 00:37:09 -0000 1.70 +++ StringUtils.java 20 Jul 2003 10:29:22 -0000 1.71 @@ -57,8 +57,6 @@ import java.util.Iterator; import java.util.List; -import org.apache.commons.lang.math.NumberUtils; - /** * <p>Common <code>String</code> manipulation routines that are * <code>null</code> safe.</p> @@ -123,18 +121,15 @@ private static int PAD_LIMIT = 8192; /** - * <p>A <code>String</code> containing all space characters (' ').</p> - * - * <p>Used for efficient space padding. The length of the String expands as needed.</p> - */ - private static String spaces = new String(" "); - - /** * <p>An array of <code>String</code>s used for padding.</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]; + + static { + padding[32] = " "; + } /** * <p><code>StringUtils<code> instances should NOT be constructed in @@ -2393,27 +2388,6 @@ } /** - * <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 space - * @return a String with <code>repeat</code> spaces - * @throws IndexOutOfBoundsException if <code>repeat < 0</code> - */ - private static String padding(int repeat) { - while (spaces.length() < repeat) { - spaces = spaces.concat(spaces); - } - return spaces.substring(0, repeat); - } - - /** * <p>Returns padding using the specified delimiter repeated * to a given length.</p> * @@ -2457,17 +2431,7 @@ * <code>null</code> if null String input */ public static String rightPad(String str, int size) { - if (str == null) { - return null; - } - int pads = size - str.length(); - if (pads <= 0) { - return str; // returns original String when possible - } - if (pads > PAD_LIMIT) { - return rightPad(str, size, ' '); - } - return str.concat(padding(pads)); + return rightPad(str, size, ' '); } /** @@ -2517,7 +2481,7 @@ * StringUtils.rightPad("bat", -1, "yz") = "bat" * StringUtils.rightPad("bat", 1, null) = IllegalArgumentException * StringUtils.rightPad("bat", 1, "") = IllegalArgumentException - * StringUtils.rightPad(null, 1, "") = IllegalArgumentException + * StringUtils.rightPad(null, 1, "") = null * </pre> * * @param str the String to pad out, may be null @@ -2528,13 +2492,13 @@ * @throws IllegalArgumentException if padStr is the empty String or null */ public static String rightPad(String str, int size, String padStr) { + if (str == null) { + return null; + } int padLen; if (padStr == null || (padLen = padStr.length()) == 0) { throw new IllegalArgumentException("Pad String must not be null or empty"); } - if (str == null) { - return null; - } int strLen = str.length(); int pads = size - strLen; if (padLen == 1 && pads <= PAD_LIMIT) { @@ -2577,17 +2541,7 @@ * <code>null</code> if null String input */ public static String leftPad(String str, int size) { - if (str == null) { - return null; - } - int pads = size - str.length(); - if (pads <= 0) { - return str; // returns original String when possible - } - if (pads > PAD_LIMIT) { - return leftPad(str, size, ' '); - } - return padding(pads).concat(str); + return leftPad(str, size, ' '); } /** @@ -2637,7 +2591,7 @@ * StringUtils.leftPad("bat", -1, "yz") = "bat" * StringUtils.leftPad("bat", 1, null) = IllegalArgumentException * StringUtils.leftPad("bat", 1, "") = IllegalArgumentException - * StringUtils.leftPad(null, 1, "") = IllegalArgumentException + * StringUtils.leftPad(null, 1, "") = null * </pre> * * @param str the String to pad out, may be null @@ -2648,13 +2602,13 @@ * @throws IllegalArgumentException if padStr is the empty String or null */ public static String leftPad(String str, int size, String padStr) { + if (str == null) { + return null; + } int padLen; if (padStr == null || (padLen = padStr.length()) == 0) { throw new IllegalArgumentException("Pad String must not be null or empty"); } - if (str == null) { - return null; - } int strLen = str.length(); int pads = size - strLen; if (padLen == 1 && pads <= PAD_LIMIT) { @@ -2706,6 +2660,34 @@ * @return centered String, <code>null</code> if null String input */ public static String center(String str, int size) { + return center(str, size, ' '); + } + + /** + * <p>Centers a String in a larger String of size <code>size</code>. + * Uses a supplied character as the value to pad the String with.</p> + * + * <p>If the size is less than the String length, the String is returned. + * A <code>null</code> String returns <code>null</code>. + * A negative size is treated as zero.</p> + * + * <pre> + * StringUtils.center(null, -1, ' ') = null + * StringUtils.center("ab", -1, ' ') = "ab" + * StringUtils.center(null, 4, ' ') = null + * StringUtils.center("", 4, ' ') = " " + * StringUtils.center("ab", 4, ' ') = " ab" + * StringUtils.center("abcd", 2, ' ') = "abcd" + * StringUtils.center("a", 4, ' ') = " a " + * StringUtils.center("a", 4, 'y') = "yayy" + * </pre> + * + * @param str the String to center, may be null + * @param size the int size of new String, negative treated as zero + * @param padChar the character to pad the new String with + * @return centered String, <code>null</code> if null String input + */ + public static String center(String str, int size, char padChar) { if (str == null || size <= 0) { return str; } @@ -2714,15 +2696,14 @@ if (pads <= 0) { return str; } - str = leftPad(str, strLen + pads / 2, ' '); - str = rightPad(str, size, ' '); + str = leftPad(str, strLen + pads / 2, padChar); + str = rightPad(str, size, padChar); return str; } /** - * <p>Centers a String in a larger String of size <code>size</code>.</p> - * - * <p>Uses a supplied String as the value to pad the String with.</p> + * <p>Centers a String in a larger String of size <code>size</code>. + * Uses a supplied String as the value to pad the String with.</p> * * <p>If the size is less than the String length, the String is returned. * A <code>null</code> String returns <code>null</code>. @@ -2734,12 +2715,12 @@ * StringUtils.center(null, 4, " ") = null * StringUtils.center("", 4, " ") = " " * StringUtils.center("ab", 4, " ") = " ab" - * StringUtils.center("abcd", 2, " ") = " abcd" + * StringUtils.center("abcd", 2, " ") = "abcd" * StringUtils.center("a", 4, " ") = " a " - * StringUtils.center("a", 4, "yz") = "yayz" + * StringUtils.center("a", 4, "yz") = "yayz" * StringUtils.center("abc", 4, null) = IllegalArgumentException * StringUtils.center("abc", 4, "") = IllegalArgumentException - * StringUtils.center(null, 4, "") = IllegalArgumentException + * StringUtils.center(null, 4, "") = null * </pre> * * @param str the String to center, may be null @@ -2749,12 +2730,12 @@ * @throws IllegalArgumentException if padStr is <code>null</code> or empty */ public static String center(String str, int size, String padStr) { - if (padStr == null || padStr.length() == 0) { - throw new IllegalArgumentException("Pad String must not be null or empty"); - } if (str == null || size <= 0) { return str; } + if (padStr == null || padStr.length() == 0) { + throw new IllegalArgumentException("Pad String must not be null or empty"); + } int strLen = str.length(); int pads = size - strLen; if (pads <= 0) { @@ -3494,6 +3475,17 @@ * <p>For example, * <code>difference("i am a machine", "i am a robot") -> "robot"</code>.</p> * + * <pre> + * StringUtils.difference(null, null) = null + * StringUtils.difference("", "") = "" + * StringUtils.difference("", "abc") = "abc" + * StringUtils.difference("abc", "") = "" + * StringUtils.difference("abc", "abc") = "" + * StringUtils.difference("ab", "abxyz") = "xyz" + * StringUtils.difference("abcde", "abxyz") = "xyz" + * StringUtils.difference("abcde", "xyz") = "xyz" + * </pre> + * * @param str1 the first String, may be null * @param str2 the second String, may be null * @return the portion of str2 where it differs from str1; returns the @@ -3520,6 +3512,17 @@ * <p>For example, * <code>differenceAt("i am a machine", "i am a robot") -> 7</code></p> * + * <pre> + * StringUtils.differenceAt(null, null) = -1 + * StringUtils.differenceAt("", "") = -1 + * StringUtils.differenceAt("", "abc") = 0 + * StringUtils.differenceAt("abc", "") = 0 + * StringUtils.differenceAt("abc", "abc") = -1 + * StringUtils.differenceAt("ab", "abxyz") = 2 + * StringUtils.differenceAt("abcde", "abxyz") = 2 + * StringUtils.differenceAt("abcde", "xyz") = 0 + * </pre> + * * @param str1 the first String, may be null * @param str2 the second String, may be null * @return the index where str2 and str1 begin to differ; -1 if they are equal @@ -3610,12 +3613,31 @@ } // Step 6 - d[i][j] = NumberUtils.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost); + d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost); } } // Step 7 return d[n][m]; + } + + /** + * <p>Gets the minimum of three <code>int</code> values.</p> + * + * @param a value 1 + * @param b value 2 + * @param c value 3 + * @return the smallest of the values + */ + private static int min(int a, int b, int c) { + // Method copied from NumberUtils to avoid dependency on subpackage + if (b < a) { + a = b; + } + if (c < a) { + a = c; + } + return a; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]