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
This commit is contained in:
Stephen Colebourne 2003-08-01 23:54:41 +00:00
parent 0dce2b5285
commit 8ce98776ee
2 changed files with 159 additions and 55 deletions

View File

@ -144,7 +144,7 @@
* @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a> * @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
* @author Phil Steitz * @author Phil Steitz
* @since 1.0 * @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 { public class StringUtils {
// Performance testing notes (JDK 1.4, Jul03, scolebourne) // 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); return (str.indexOf(searchStr) >= 0);
} }
// IndexOfAny // IndexOfAny strings
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
/** /**
* <p>Find the first index of any of a set of potential substrings.</p> * <p>Find the first index of any of a set of potential substrings.</p>
@ -1112,7 +1112,73 @@ public static int lastIndexOfAny(String str, String[] searchStrs) {
return ret; return ret;
} }
// IndexOfAnyBut // IndexOfAny chars
//-----------------------------------------------------------------------
/**
* <p>Search a String to find the first index of any
* character in the given set of characters.</p>
*
* <p>A <code>null</code> String will return <code>-1</code>.
* A <code>null</code> or zero length search array will return <code>-1</code>.</p>
*
* <pre>
* 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
* </pre>
*
* @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;
}
/**
* <p>Search a String to find the first index of any
* character in the given set of characters.</p>
*
* <p>A <code>null</code> String will return <code>-1</code>.
* A <code>null</code> search string will return <code>-1</code>.</p>
*
* <pre>
* 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
* </pre>
*
* @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
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
/** /**
* <p>Search a String to find the first index of any * <p>Search a String to find the first index of any
@ -1123,7 +1189,9 @@ public static int lastIndexOfAny(String str, String[] searchStrs) {
* *
* <pre> * <pre>
* StringUtils.indexOfAnyBut(null, *) = -1 * StringUtils.indexOfAnyBut(null, *) = -1
* StringUtils.indexOfAnyBut("", *) = -1
* StringUtils.indexOfAnyBut(*, null) = -1 * StringUtils.indexOfAnyBut(*, null) = -1
* StringUtils.indexOfAnyBut(*, []) = -1
* StringUtils.indexOfAnyBut("zzabyycdxx",'za') = 3 * StringUtils.indexOfAnyBut("zzabyycdxx",'za') = 3
* StringUtils.indexOfAnyBut("zzabyycdxx", '') = 0 * StringUtils.indexOfAnyBut("zzabyycdxx", '') = 0
* StringUtils.indexOfAnyBut("aba", 'ab') = -1 * 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 * @return the index of any of the chars, -1 if no match or null input
*/ */
public static int indexOfAnyBut(String str, char[] searchChars) { 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 -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) {
* *
* <pre> * <pre>
* StringUtils.indexOfAnyBut(null, *) = -1 * StringUtils.indexOfAnyBut(null, *) = -1
* StringUtils.indexOfAnyBut("", *) = -1
* StringUtils.indexOfAnyBut(*, null) = -1 * StringUtils.indexOfAnyBut(*, null) = -1
* StringUtils.indexOfAnyBut(*, "") = -1
* StringUtils.indexOfAnyBut("zzabyycdxx", "za") = 3 * StringUtils.indexOfAnyBut("zzabyycdxx", "za") = 3
* StringUtils.indexOfAnyBut("zzabyycdxx", "") = 0 * StringUtils.indexOfAnyBut("zzabyycdxx", "") = 0
* StringUtils.indexOfAnyBut("aba","ab") = -1 * 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 * @return the index of any of the chars, -1 if no match or null input
*/ */
public static int indexOfAnyBut(String str, String searchChars) { 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; return -1;
} }
for (int i = 0; i < str.length(); i++) { for (int i = 0; i < str.length(); i++) {
if (searchChars.indexOf(str.charAt(i)) < 0) { if (searchChars.indexOf(str.charAt(i)) < 0) {
return i; return i;
} }
} }
return -1; return -1;
} }

View File

@ -64,7 +64,7 @@
* @author <a href="mailto:scolebourne@joda.org">Stephen Colebourne</a> * @author <a href="mailto:scolebourne@joda.org">Stephen Colebourne</a>
* @author <a href="mailto:ridesmet@users.sourceforge.net">Ringo De Smet</a> * @author <a href="mailto:ridesmet@users.sourceforge.net">Ringo De Smet</a>
* @author Phil Steitz * @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 { public class StringUtilsEqualsIndexOfTest extends TestCase {
private static final String FOO = "foo"; private static final String FOO = "foo";
@ -251,10 +251,10 @@ public void testContainsString() {
} }
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
public void testIndexOfAny() { public void testIndexOfAny_StringStringarray() {
assertEquals(-1, StringUtils.indexOfAny(null, null)); assertEquals(-1, StringUtils.indexOfAny(null, (String[]) null));
assertEquals(-1, StringUtils.indexOfAny(null, FOOBAR_SUB_ARRAY)); 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(2, StringUtils.indexOfAny(FOOBAR, FOOBAR_SUB_ARRAY));
assertEquals(-1, StringUtils.indexOfAny(FOOBAR, new String[0])); assertEquals(-1, StringUtils.indexOfAny(FOOBAR, new String[0]));
assertEquals(-1, StringUtils.indexOfAny(null, 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})); 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, null));
assertEquals(-1, StringUtils.lastIndexOfAny(null, FOOBAR_SUB_ARRAY)); assertEquals(-1, StringUtils.lastIndexOfAny(null, FOOBAR_SUB_ARRAY));
assertEquals(-1, StringUtils.lastIndexOfAny(FOOBAR, null)); assertEquals(-1, StringUtils.lastIndexOfAny(FOOBAR, null));
@ -286,42 +286,69 @@ public void testLastIndexOfAny() {
} }
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
public void testIndexOfAnyBut() { public void testIndexOfAny_StringChararray() {
String str1 = "a"; assertEquals(-1, StringUtils.indexOfAny(null, (char[]) null));
String str2 = "b"; assertEquals(-1, StringUtils.indexOfAny(null, new char[0]));
String str3 = "ab"; assertEquals(-1, StringUtils.indexOfAny(null, new char[] {'a','b'}));
String chars1= "b";
String chars2= "a"; assertEquals(-1, StringUtils.indexOfAny("", (char[]) null));
String chars3= "ab"; assertEquals(-1, StringUtils.indexOfAny("", new char[0]));
assertEquals(-1, StringUtils.indexOfAnyBut(null, (String) null)); assertEquals(-1, StringUtils.indexOfAny("", new char[] {'a','b'}));
assertEquals(-1, StringUtils.indexOfAnyBut("", (String) null));
assertEquals(-1, StringUtils.indexOfAnyBut(null, "")); assertEquals(-1, StringUtils.indexOfAny("zzabyycdxx", (char[]) null));
assertEquals(0, StringUtils.indexOfAnyBut(str1, "")); assertEquals(-1, StringUtils.indexOfAny("zzabyycdxx", new char[0]));
assertEquals(-1, StringUtils.indexOfAnyBut("", "")); assertEquals(0, StringUtils.indexOfAny("zzabyycdxx", new char[] {'z','a'}));
assertEquals(-1, StringUtils.indexOfAnyBut("", chars1)); assertEquals(3, StringUtils.indexOfAny("zzabyycdxx", new char[] {'b','y'}));
assertEquals(0, StringUtils.indexOfAnyBut(str1, chars1)); assertEquals(-1, StringUtils.indexOfAny("ab", new char[] {'z'}));
assertEquals(-1, StringUtils.indexOfAnyBut(str1, chars2)); }
assertEquals(-1, StringUtils.indexOfAnyBut(str1, chars3));
assertEquals(-1, StringUtils.indexOfAnyBut(str2, chars1)); public void testIndexOfAny_StringString() {
assertEquals(0, StringUtils.indexOfAnyBut(str2, chars2)); assertEquals(-1, StringUtils.indexOfAny(null, (String) null));
assertEquals(-1, StringUtils.indexOfAnyBut(str2, chars3)); assertEquals(-1, StringUtils.indexOfAny(null, ""));
assertEquals(0, StringUtils.indexOfAnyBut(str3, chars1)); assertEquals(-1, StringUtils.indexOfAny(null, "ab"));
assertEquals(1, StringUtils.indexOfAnyBut(str3, chars2));
assertEquals(-1, StringUtils.indexOfAnyBut(str3, chars3)); assertEquals(-1, StringUtils.indexOfAny("", (String) null));
assertEquals(3, StringUtils.indexOfAnyBut("zzabyycdxx", "za")); assertEquals(-1, StringUtils.indexOfAny("", ""));
assertEquals(0, StringUtils.indexOfAnyBut("zzabyycdxx", "")); assertEquals(-1, StringUtils.indexOfAny("", "ab"));
assertEquals(-1, StringUtils.indexOfAnyBut("aba","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 testIndexOfAnyButChar() { public void testIndexOfAnyBut_StringChararray() {
assertEquals(-1, StringUtils.indexOfAnyBut(null, (char[]) null)); 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(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[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(3, StringUtils.indexOfAnyBut("zzabyycdxx", new char[] {'z','a'}));
assertEquals(0, StringUtils.indexOfAnyBut("zzabyycdxx", new char[0])); assertEquals(0, StringUtils.indexOfAnyBut("zzabyycdxx", new char[] {'b','y'}));
assertEquals(-1, StringUtils.indexOfAnyBut("ab", new char[] {'a','b'})); 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"));
} }
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
@ -349,7 +376,7 @@ public void testContainsOnly_String() {
assertEquals(true, StringUtils.containsOnly(str3, chars3)); assertEquals(true, StringUtils.containsOnly(str3, chars3));
} }
public void testContainsOnly_CharArray() { public void testContainsOnly_Chararray() {
String str1 = "a"; String str1 = "a";
String str2 = "b"; String str2 = "b";
String str3 = "ab"; String str3 = "ab";
@ -398,7 +425,7 @@ public void testContainsNone_String() {
assertEquals(true, StringUtils.containsNone(str3, chars3)); assertEquals(true, StringUtils.containsNone(str3, chars3));
} }
public void testContainsNone_CharArray() { public void testContainsNone_Chararray() {
String str1 = "a"; String str1 = "a";
String str2 = "b"; String str2 = "b";
String str3 = "ab."; String str3 = "ab.";