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]

Reply via email to