From 8ce98776ee559d73494a449ff94a6eda1f77b4a4 Mon Sep 17 00:00:00 2001 From: Stephen Colebourne Date: Fri, 1 Aug 2003 23:54:41 +0000 Subject: [PATCH] Complete the indexOfAny() method set git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/lang/trunk@137554 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/commons/lang/StringUtils.java | 101 ++++++++++++++-- .../lang/StringUtilsEqualsIndexOfTest.java | 113 +++++++++++------- 2 files changed, 159 insertions(+), 55 deletions(-) diff --git a/src/java/org/apache/commons/lang/StringUtils.java b/src/java/org/apache/commons/lang/StringUtils.java index c92fa32fd..09c16bb03 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.89 2003/08/01 23:20:06 scolebourne Exp $ + * @version $Id: StringUtils.java,v 1.90 2003/08/01 23:54:41 scolebourne Exp $ */ public class StringUtils { // Performance testing notes (JDK 1.4, Jul03, scolebourne) @@ -1011,7 +1011,7 @@ public static boolean contains(String str, String searchStr) { return (str.indexOf(searchStr) >= 0); } - // IndexOfAny + // IndexOfAny strings //----------------------------------------------------------------------- /** *

Find the first index of any of a set of potential substrings.

@@ -1112,7 +1112,73 @@ public static int lastIndexOfAny(String str, String[] searchStrs) { return ret; } - // IndexOfAnyBut + // IndexOfAny chars + //----------------------------------------------------------------------- + /** + *

Search a String to find the first index of any + * character in the given set of characters.

+ * + *

A null String will return -1. + * A null or zero length search array will return -1.

+ * + *
+     * StringUtils.indexOfAny(null, *)                = -1
+     * StringUtils.indexOfAny("", *)                  = -1
+     * StringUtils.indexOfAny(*, null)                = -1
+     * StringUtils.indexOfAny(*, [])                  = -1
+     * StringUtils.indexOfAny("zzabyycdxx",['z','a']) = 0
+     * StringUtils.indexOfAny("zzabyycdxx",['b','y']) = 3
+     * StringUtils.indexOfAny("aba", ['z'])           = -1
+     * 
+ * + * @param str the String to check, may be null + * @param searchChars the chars to search for, may be null + * @return the index of any of the chars, -1 if no match or null input + */ + public static int indexOfAny(String str, char[] searchChars) { + if (str == null || str.length() == 0 || searchChars == null || searchChars.length == 0) { + return -1; + } + for (int i = 0; i < str.length(); i ++) { + char ch = str.charAt(i); + for (int j = 0; j < searchChars.length; j++) { + if (searchChars[j] == ch) { + return i; + } + } + } + return -1; + } + + /** + *

Search a String to find the first index of any + * character in the given set of characters.

+ * + *

A null String will return -1. + * A null search string will return -1.

+ * + *
+     * StringUtils.indexOfAny(null, *)            = -1
+     * StringUtils.indexOfAny("", *)              = -1
+     * StringUtils.indexOfAny(*, null)            = -1
+     * StringUtils.indexOfAny(*, "")              = -1
+     * StringUtils.indexOfAny("zzabyycdxx", "za") = 0
+     * StringUtils.indexOfAny("zzabyycdxx", "by") = 3
+     * StringUtils.indexOfAny("aba","z")          = -1
+     * 
+ * + * @param str the String to check, may be null + * @param searchChars the chars to search for, may be null + * @return the index of any of the chars, -1 if no match or null input + */ + public static int indexOfAny(String str, String searchChars) { + if (str == null || str.length() == 0 || searchChars == null || searchChars.length() == 0) { + return -1; + } + return indexOfAny(str, searchChars.toCharArray()); + } + + // IndexOfAnyBut chars //----------------------------------------------------------------------- /** *

Search a String to find the first index of any @@ -1123,7 +1189,9 @@ public static int lastIndexOfAny(String str, String[] searchStrs) { * *

      * StringUtils.indexOfAnyBut(null, *)           = -1
+     * StringUtils.indexOfAnyBut("", *)             = -1
      * StringUtils.indexOfAnyBut(*, null)           = -1
+     * StringUtils.indexOfAnyBut(*, [])             = -1
      * StringUtils.indexOfAnyBut("zzabyycdxx",'za') = 3
      * StringUtils.indexOfAnyBut("zzabyycdxx", '')  = 0
      * StringUtils.indexOfAnyBut("aba", 'ab')       = -1
@@ -1134,10 +1202,19 @@ public static int lastIndexOfAny(String str, String[] searchStrs) {
      * @return the index of any of the chars, -1 if no match or null input
      */
      public static int indexOfAnyBut(String str, char[] searchChars) {
-         if (searchChars == null) {
+         if (str == null || str.length() == 0 || searchChars == null || searchChars.length == 0) {
              return -1;
          }
-         return indexOfAnyBut(str, new String(searchChars));
+         outer: for (int i = 0; i < str.length(); i ++) {
+             char ch = str.charAt(i);
+             for (int j = 0; j < searchChars.length; j++) {
+                 if (searchChars[j] == ch) {
+                     continue outer;
+                 }
+             }
+             return i;
+         }
+         return -1;
      }
 
     /**
@@ -1149,7 +1226,9 @@ public static int indexOfAnyBut(String str, char[] searchChars) {
      * 
      * 
      * StringUtils.indexOfAnyBut(null, *)            = -1
+     * StringUtils.indexOfAnyBut("", *)              = -1
      * StringUtils.indexOfAnyBut(*, null)            = -1
+     * StringUtils.indexOfAnyBut(*, "")              = -1
      * StringUtils.indexOfAnyBut("zzabyycdxx", "za") = 3
      * StringUtils.indexOfAnyBut("zzabyycdxx", "")   = 0
      * StringUtils.indexOfAnyBut("aba","ab")         = -1
@@ -1160,16 +1239,14 @@ public static int indexOfAnyBut(String str, char[] searchChars) {
      * @return the index of any of the chars, -1 if no match or null input
      */
     public static int indexOfAnyBut(String str, String searchChars) {
-        if (str == null || searchChars == null) {
+        if (str == null || str.length() == 0 || searchChars == null || searchChars.length() == 0) {
             return -1;
         }
-
-        for (int i = 0; i < str.length(); i ++) {
-           if (searchChars.indexOf(str.charAt(i)) < 0) {
-               return i;
-           }
+        for (int i = 0; i < str.length(); i++) {
+            if (searchChars.indexOf(str.charAt(i)) < 0) {
+                return i;
+            }
         }
-
         return -1;
     }
 
diff --git a/src/test/org/apache/commons/lang/StringUtilsEqualsIndexOfTest.java b/src/test/org/apache/commons/lang/StringUtilsEqualsIndexOfTest.java
index 0adefd329..d80180ab9 100644
--- a/src/test/org/apache/commons/lang/StringUtilsEqualsIndexOfTest.java
+++ b/src/test/org/apache/commons/lang/StringUtilsEqualsIndexOfTest.java
@@ -64,7 +64,7 @@
  * @author Stephen Colebourne
  * @author Ringo De Smet
  * @author Phil Steitz
- * @version $Id: StringUtilsEqualsIndexOfTest.java,v 1.6 2003/07/30 22:21:39 scolebourne Exp $
+ * @version $Id: StringUtilsEqualsIndexOfTest.java,v 1.7 2003/08/01 23:54:41 scolebourne Exp $
  */
 public class StringUtilsEqualsIndexOfTest extends TestCase {
     private static final String FOO = "foo";
@@ -251,10 +251,10 @@ public void testContainsString() {
     }
 
     //-----------------------------------------------------------------------
-    public void testIndexOfAny() {
-        assertEquals(-1, StringUtils.indexOfAny(null, null));
+    public void testIndexOfAny_StringStringarray() {
+        assertEquals(-1, StringUtils.indexOfAny(null, (String[]) null));
         assertEquals(-1, StringUtils.indexOfAny(null, FOOBAR_SUB_ARRAY));
-        assertEquals(-1, StringUtils.indexOfAny(FOOBAR, null));
+        assertEquals(-1, StringUtils.indexOfAny(FOOBAR, (String[]) null));
         assertEquals(2, StringUtils.indexOfAny(FOOBAR, FOOBAR_SUB_ARRAY));
         assertEquals(-1, StringUtils.indexOfAny(FOOBAR, new String[0]));
         assertEquals(-1, StringUtils.indexOfAny(null, new String[0]));
@@ -268,7 +268,7 @@ public void testIndexOfAny() {
         assertEquals(-1, StringUtils.indexOfAny(null, new String[] {null}));
     }
 
-    public void testLastIndexOfAny() {
+    public void testLastIndexOfAny_StringStringarray() {
         assertEquals(-1, StringUtils.lastIndexOfAny(null, null));
         assertEquals(-1, StringUtils.lastIndexOfAny(null, FOOBAR_SUB_ARRAY));
         assertEquals(-1, StringUtils.lastIndexOfAny(FOOBAR, null));
@@ -286,44 +286,71 @@ public void testLastIndexOfAny() {
     }
 
     //-----------------------------------------------------------------------
-    public void testIndexOfAnyBut() {
-        String str1 = "a";
-        String str2 = "b";
-        String str3 = "ab";
-        String chars1= "b";
-        String chars2= "a";
-        String chars3= "ab";
-        assertEquals(-1, StringUtils.indexOfAnyBut(null, (String) null));
-        assertEquals(-1, StringUtils.indexOfAnyBut("", (String) null));
-        assertEquals(-1, StringUtils.indexOfAnyBut(null, ""));
-        assertEquals(0, StringUtils.indexOfAnyBut(str1, ""));
-        assertEquals(-1, StringUtils.indexOfAnyBut("", ""));
-        assertEquals(-1, StringUtils.indexOfAnyBut("", chars1));
-        assertEquals(0, StringUtils.indexOfAnyBut(str1, chars1));
-        assertEquals(-1, StringUtils.indexOfAnyBut(str1, chars2));
-        assertEquals(-1, StringUtils.indexOfAnyBut(str1, chars3));
-        assertEquals(-1, StringUtils.indexOfAnyBut(str2, chars1));
-        assertEquals(0, StringUtils.indexOfAnyBut(str2, chars2));
-        assertEquals(-1, StringUtils.indexOfAnyBut(str2, chars3));
-        assertEquals(0, StringUtils.indexOfAnyBut(str3, chars1));
-        assertEquals(1, StringUtils.indexOfAnyBut(str3, chars2));
-        assertEquals(-1, StringUtils.indexOfAnyBut(str3, chars3));
-        assertEquals(3, StringUtils.indexOfAnyBut("zzabyycdxx", "za"));
-        assertEquals(0, StringUtils.indexOfAnyBut("zzabyycdxx", ""));
-        assertEquals(-1, StringUtils.indexOfAnyBut("aba","ab"));
-    }
-    
-    //-----------------------------------------------------------------------
-    public void testIndexOfAnyButChar() {
-        assertEquals(-1, StringUtils.indexOfAnyBut(null, (char[]) null));
-        assertEquals(-1, StringUtils.indexOfAnyBut("", (char[]) null));
-        assertEquals(-1, StringUtils.indexOfAnyBut(null, new char[0]));
-        assertEquals(-1, StringUtils.indexOfAnyBut("", new char[0]));
-        assertEquals(3, StringUtils.indexOfAnyBut("zzabyycdxx", new char[] {'z','a'})); 
-        assertEquals(0, StringUtils.indexOfAnyBut("zzabyycdxx", new char[0]));
-        assertEquals(-1, StringUtils.indexOfAnyBut("ab", new char[] {'a','b'}));
+    public void testIndexOfAny_StringChararray() {
+        assertEquals(-1, StringUtils.indexOfAny(null, (char[]) null));
+        assertEquals(-1, StringUtils.indexOfAny(null, new char[0]));
+        assertEquals(-1, StringUtils.indexOfAny(null, new char[] {'a','b'}));
+        
+        assertEquals(-1, StringUtils.indexOfAny("", (char[]) null));
+        assertEquals(-1, StringUtils.indexOfAny("", new char[0]));
+        assertEquals(-1, StringUtils.indexOfAny("", new char[] {'a','b'}));
+        
+        assertEquals(-1, StringUtils.indexOfAny("zzabyycdxx", (char[]) null)); 
+        assertEquals(-1, StringUtils.indexOfAny("zzabyycdxx", new char[0])); 
+        assertEquals(0, StringUtils.indexOfAny("zzabyycdxx", new char[] {'z','a'})); 
+        assertEquals(3, StringUtils.indexOfAny("zzabyycdxx", new char[] {'b','y'}));
+        assertEquals(-1, StringUtils.indexOfAny("ab", new char[] {'z'}));
     }
 
+    public void testIndexOfAny_StringString() {
+        assertEquals(-1, StringUtils.indexOfAny(null, (String) null));
+        assertEquals(-1, StringUtils.indexOfAny(null, ""));
+        assertEquals(-1, StringUtils.indexOfAny(null, "ab"));
+        
+        assertEquals(-1, StringUtils.indexOfAny("", (String) null));
+        assertEquals(-1, StringUtils.indexOfAny("", ""));
+        assertEquals(-1, StringUtils.indexOfAny("", "ab"));
+        
+        assertEquals(-1, StringUtils.indexOfAny("zzabyycdxx", (String) null)); 
+        assertEquals(-1, StringUtils.indexOfAny("zzabyycdxx", "")); 
+        assertEquals(0, StringUtils.indexOfAny("zzabyycdxx", "za")); 
+        assertEquals(3, StringUtils.indexOfAny("zzabyycdxx", "by"));
+        assertEquals(-1, StringUtils.indexOfAny("ab", "z"));
+    }
+
+    //-----------------------------------------------------------------------
+    public void testIndexOfAnyBut_StringChararray() {
+        assertEquals(-1, StringUtils.indexOfAnyBut(null, (char[]) null));
+        assertEquals(-1, StringUtils.indexOfAnyBut(null, new char[0]));
+        assertEquals(-1, StringUtils.indexOfAnyBut(null, new char[] {'a','b'}));
+        
+        assertEquals(-1, StringUtils.indexOfAnyBut("", (char[]) null));
+        assertEquals(-1, StringUtils.indexOfAnyBut("", new char[0]));
+        assertEquals(-1, StringUtils.indexOfAnyBut("", new char[] {'a','b'}));
+        
+        assertEquals(-1, StringUtils.indexOfAnyBut("zzabyycdxx", (char[]) null));
+        assertEquals(-1, StringUtils.indexOfAnyBut("zzabyycdxx", new char[0]));
+        assertEquals(3, StringUtils.indexOfAnyBut("zzabyycdxx", new char[] {'z','a'})); 
+        assertEquals(0, StringUtils.indexOfAnyBut("zzabyycdxx", new char[] {'b','y'})); 
+        assertEquals(0, StringUtils.indexOfAnyBut("ab", new char[] {'z'}));
+    }
+
+    public void testIndexOfAnyBut_StringString() {
+        assertEquals(-1, StringUtils.indexOfAnyBut(null, (String) null));
+        assertEquals(-1, StringUtils.indexOfAnyBut(null, ""));
+        assertEquals(-1, StringUtils.indexOfAnyBut(null, "ab"));
+        
+        assertEquals(-1, StringUtils.indexOfAnyBut("", (String) null));
+        assertEquals(-1, StringUtils.indexOfAnyBut("", ""));
+        assertEquals(-1, StringUtils.indexOfAnyBut("", "ab"));
+        
+        assertEquals(-1, StringUtils.indexOfAnyBut("zzabyycdxx", (String) null)); 
+        assertEquals(-1, StringUtils.indexOfAnyBut("zzabyycdxx", "")); 
+        assertEquals(3, StringUtils.indexOfAnyBut("zzabyycdxx", "za")); 
+        assertEquals(0, StringUtils.indexOfAnyBut("zzabyycdxx", "by"));
+        assertEquals(0, StringUtils.indexOfAnyBut("ab", "z"));
+    }
+    
     //-----------------------------------------------------------------------
     public void testContainsOnly_String() {
         String str1 = "a";
@@ -349,7 +376,7 @@ public void testContainsOnly_String() {
         assertEquals(true, StringUtils.containsOnly(str3, chars3));
     }
 
-    public void testContainsOnly_CharArray() {
+    public void testContainsOnly_Chararray() {
         String str1 = "a";
         String str2 = "b";
         String str3 = "ab";
@@ -398,7 +425,7 @@ public void testContainsNone_String() {
         assertEquals(true, StringUtils.containsNone(str3, chars3));
     }
 
-    public void testContainsNone_CharArray() {
+    public void testContainsNone_Chararray() {
         String str1 = "a";
         String str2 = "b";
         String str3 = "ab.";