scolebourne 2003/07/18 16:57:43 Modified: lang/src/test/org/apache/commons/lang StringUtilsTest.java lang/src/java/org/apache/commons/lang StringUtils.java Log: Fixed leftPad() and rightPad() to correctly handle multi letter pad strings Revision Changes Path 1.27 +3 -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.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- StringUtilsTest.java 18 Jul 2003 02:06:23 -0000 1.26 +++ StringUtilsTest.java 18 Jul 2003 23:57:43 -0000 1.27 @@ -315,6 +315,7 @@ 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, " ")); @@ -323,6 +324,7 @@ 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("abc", 4, null); fail(); 1.63 +43 -16 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.62 retrieving revision 1.63 diff -u -r1.62 -r1.63 --- StringUtils.java 18 Jul 2003 02:06:24 -0000 1.62 +++ StringUtils.java 18 Jul 2003 23:57:43 -0000 1.63 @@ -1967,18 +1967,31 @@ if (str == null) { return null; } - if (padStr == null || padStr.length() == 0) { + int padLen; + if (padStr == null || (padLen = padStr.length()) == 0) { throw new IllegalArgumentException("Pad String must not be null or empty"); } - if (padStr.length() == 1 && size - str.length() <= PAD_LIMIT) { - return rightPad(str, size, padStr.charAt(0)); + int strLen = str.length(); + int pads = size - strLen; + if (padLen == 1 && pads <= PAD_LIMIT) { + return rightPad(str, size, padStr.charAt(0)); } - - size = (size - str.length()) / padStr.length(); - if (size > 0) { - str += repeat(padStr, size); + + if (pads <= 0) { + return str; // returns original String when possible + } + if (pads == padLen) { + return str.concat(padStr); + } else if (pads < padLen) { + return str.concat(padStr.substring(0, pads)); + } else { + char[] padding = new char[pads]; + char[] padChars = padStr.toCharArray(); + for (int i = 0; i < pads; i++) { + padding[i] = padChars[i % padLen]; + } + return str.concat(new String(padding)); } - return str; } /** @@ -2041,7 +2054,7 @@ return str; // returns original String when possible } if (pads > PAD_LIMIT) { - return leftPad(str, size, ' '); + return leftPad(str, size, String.valueOf(padChar)); } return padding(pads, padChar).concat(str); } @@ -2073,17 +2086,31 @@ if (str == null) { return null; } - if (padStr == null || padStr.length() == 0) { + int padLen; + if (padStr == null || (padLen = padStr.length()) == 0) { throw new IllegalArgumentException("Pad String must not be null or empty"); } - if (padStr.length() == 1 && size - str.length() <= PAD_LIMIT) { + int strLen = str.length(); + int pads = size - strLen; + if (padLen == 1 && pads <= PAD_LIMIT) { return leftPad(str, size, padStr.charAt(0)); } - size = (size - str.length()) / padStr.length(); - if (size > 0) { - str = repeat(padStr, size) + str; + + if (pads <= 0) { + return str; // returns original String when possible + } + if (pads == padLen) { + return padStr.concat(str); + } else if (pads < padLen) { + return padStr.substring(0, pads).concat(str); + } else { + char[] padding = new char[pads]; + char[] padChars = padStr.toCharArray(); + for (int i = 0; i < pads; i++) { + padding[i] = padChars[i % padLen]; + } + return new String(padding).concat(str); } - return str; } // Centering
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]