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]