diff --git a/src/java/org/apache/commons/lang/StringUtils.java b/src/java/org/apache/commons/lang/StringUtils.java index 9d4d33737d9..da0536d4322 100644 --- a/src/java/org/apache/commons/lang/StringUtils.java +++ b/src/java/org/apache/commons/lang/StringUtils.java @@ -144,7 +144,7 @@ * @author Gary Gregory * @author Phil Steitz * @since 1.0 - * @version $Id: StringUtils.java,v 1.87 2003/08/01 23:01:52 scolebourne Exp $ + * @version $Id: StringUtils.java,v 1.88 2003/08/01 23:11:55 scolebourne Exp $ */ public class StringUtils { // Performance testing notes (JDK 1.4, Jul03, scolebourne) @@ -1431,7 +1431,7 @@ public static String substring(String str, int start, int end) { * *
      * StringUtils.left(null, *)    = null
-     * StringUtils.left(*, -ve)     = IllegalArgumentException
+     * StringUtils.left(*, -ve)     = ""
      * StringUtils.left("", *)      = ""
      * StringUtils.left("abc", 0)   = ""
      * StringUtils.left("abc", 2)   = "ab"
@@ -1441,14 +1441,13 @@ public static String substring(String str, int start, int end) {
      * @param str  the String to get the leftmost characters from, may be null
      * @param len  the length of the required String, must be zero or positive
      * @return the leftmost characters, null if null String input
-     * @throws IllegalArgumentException if len is less than zero
      */
     public static String left(String str, int len) {
         if (str == null) {
             return null;
         }
         if (len < 0) {
-            throw new IllegalArgumentException("Requested String length " + len + " is less than zero");
+            return "";
         }
         if (str.length() <= len) {
             return str;
@@ -1466,7 +1465,7 @@ public static String left(String str, int len) {
      *
      * 
      * StringUtils.right(null, *)    = null
-     * StringUtils.right(*, -ve)     = IllegalArgumentException
+     * StringUtils.right(*, -ve)     = ""
      * StringUtils.right("", *)      = ""
      * StringUtils.right("abc", 0)   = ""
      * StringUtils.right("abc", 2)   = "bc"
@@ -1476,14 +1475,13 @@ public static String left(String str, int len) {
      * @param str  the String to get the rightmost characters from, may be null
      * @param len  the length of the required String, must be zero or positive
      * @return the rightmost characters, null if null String input
-     * @throws IllegalArgumentException if len is less than zero
      */
     public static String right(String str, int len) {
         if (str == null) {
             return null;
         }
         if (len < 0) {
-            throw new IllegalArgumentException("Requested String length " + len + " is less than zero");
+            return "";
         }
         if (str.length() <= len) {
             return str;
@@ -1502,7 +1500,7 @@ public static String right(String str, int len) {
      *
      * 
      * StringUtils.mid(null, *, *)    = null
-     * StringUtils.mid(*, *, -ve)     = IllegalArgumentException
+     * StringUtils.mid(*, *, -ve)     = ""
      * StringUtils.mid("", 0, *)      = ""
      * StringUtils.mid("abc", 0, 2)   = "ab"
      * StringUtils.mid("abc", 0, 4)   = "abc"
@@ -1515,21 +1513,17 @@ public static String right(String str, int len) {
      * @param pos  the position to start from, negative treated as zero
      * @param len  the length of the required String, must be zero or positive
      * @return the middle characters, null if null String input
-     * @throws IllegalArgumentException if len is less than zero
      */
     public static String mid(String str, int pos, int len) {
         if (str == null) {
             return null;
         }
-        if (pos > str.length()) {
+        if (len < 0 || pos > str.length()) {
             return "";
         }
         if (pos < 0) {
             pos = 0;
         }
-        if (len < 0) {
-            throw new IllegalArgumentException("Requested String length " + len + " is less than zero");
-        }
         if (str.length() <= (pos + len)) {
             return str.substring(pos);
         } else {
diff --git a/src/test/org/apache/commons/lang/StringUtilsSubstringTest.java b/src/test/org/apache/commons/lang/StringUtilsSubstringTest.java
index 0eac11137c7..6e3a60c4d88 100644
--- a/src/test/org/apache/commons/lang/StringUtilsSubstringTest.java
+++ b/src/test/org/apache/commons/lang/StringUtilsSubstringTest.java
@@ -64,7 +64,7 @@
  * @author Stephen Colebourne
  * @author Ringo De Smet
  * @author Phil Steitz
- * @version $Id: StringUtilsSubstringTest.java,v 1.11 2003/08/01 22:05:43 scolebourne Exp $
+ * @version $Id: StringUtilsSubstringTest.java,v 1.12 2003/08/01 23:11:54 scolebourne Exp $
  */
 public class StringUtilsSubstringTest extends TestCase {
     private static final String FOO = "foo";
@@ -139,30 +139,30 @@ public void testLeft_String() {
         assertSame(null, StringUtils.left(null, -1));
         assertSame(null, StringUtils.left(null, 0));
         assertSame(null, StringUtils.left(null, 2));
-        assertSame("", StringUtils.left("", 0));
-        assertSame("", StringUtils.left("", 2));
+        
+        assertEquals("", StringUtils.left("", -1));
+        assertEquals("", StringUtils.left("", 0));
+        assertEquals("", StringUtils.left("", 2));
+        
+        assertEquals("", StringUtils.left(FOOBAR, -1));
         assertEquals("", StringUtils.left(FOOBAR, 0));
         assertEquals(FOO, StringUtils.left(FOOBAR, 3));
         assertSame(FOOBAR, StringUtils.left(FOOBAR, 80));
-        try {
-            StringUtils.left(FOOBAR, -1);
-            fail();
-        } catch (IllegalArgumentException ex) {}
     }
     
     public void testRight_String() {
         assertSame(null, StringUtils.right(null, -1));
         assertSame(null, StringUtils.right(null, 0));
         assertSame(null, StringUtils.right(null, 2));
-        assertSame("", StringUtils.right("", 0));
-        assertSame("", StringUtils.right("", 2));
+        
+        assertEquals("", StringUtils.right("", -1));
+        assertEquals("", StringUtils.right("", 0));
+        assertEquals("", StringUtils.right("", 2));
+        
+        assertEquals("", StringUtils.right(FOOBAR, -1));
         assertEquals("", StringUtils.right(FOOBAR, 0));
         assertEquals(BAR, StringUtils.right(FOOBAR, 3));
         assertSame(FOOBAR, StringUtils.right(FOOBAR, 80));
-        try {
-            StringUtils.right(FOOBAR, -1);
-            fail();
-        } catch (IllegalArgumentException ex) {}
     }
     
     public void testMid_String() {
@@ -170,8 +170,12 @@ public void testMid_String() {
         assertSame(null, StringUtils.mid(null, 0, -1));
         assertSame(null, StringUtils.mid(null, 3, 0));
         assertSame(null, StringUtils.mid(null, 3, 2));
-        assertSame("", StringUtils.mid("", 0, 0));
-        assertSame("", StringUtils.mid("", 0, 2));
+        
+        assertEquals("", StringUtils.mid("", 0, -1));
+        assertEquals("", StringUtils.mid("", 0, 0));
+        assertEquals("", StringUtils.mid("", 0, 2));
+        
+        assertEquals("", StringUtils.mid(FOOBAR, 3, -1));
         assertEquals("", StringUtils.mid(FOOBAR, 3, 0));
         assertEquals("b", StringUtils.mid(FOOBAR, 3, 1));
         assertEquals(FOO, StringUtils.mid(FOOBAR, 0, 3));
@@ -180,10 +184,6 @@ public void testMid_String() {
         assertEquals(BAR, StringUtils.mid(FOOBAR, 3, 80));
         assertEquals("", StringUtils.mid(FOOBAR, 9, 3));
         assertEquals(FOO, StringUtils.mid(FOOBAR, -1, 3));
-        try {
-            StringUtils.mid(FOOBAR, 0, -1);
-            fail();
-        } catch (IllegalArgumentException ex) {}
     }
     
     //-----------------------------------------------------------------------