Java String index of any character not in character set

Description

Java String index of any character not in character set



//package com.demo2s;

public class Main {
  public static void main(String[] argv) throws Exception {
    String str = "demo2s.com";
    char[] searchChars = new char[] { 'd', 'e', 'm', 'o', '2', 's' };
    System.out.println(indexOfAnyBut(str, searchChars));
  }/*from w  w w  .  j a  v  a2s .c  o  m*/

  /**
   * <p>
   * Search a String to find the first index of any character not 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>
   * indexOfAnyBut(null, *)           = -1
   * indexOfAnyBut("", *)             = -1
   * indexOfAnyBut(*, null)           = -1
   * indexOfAnyBut(*, [])             = -1
   * indexOfAnyBut("zzabyycdxx",'za') = 3
   * indexOfAnyBut("zzabyycdxx", '')  = 0
   * indexOfAnyBut("aba", 'ab')       = -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
   * @since 2.0
   */
  public static int indexOfAnyBut(String str, char[] searchChars) {
    if (isEmpty(str) || isArrayEmpty(searchChars)) {
      return -1;
    }
    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;
  }

  /**
   * <p>
   * Search a String to find the first index of any character not 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>
   * indexOfAnyBut(null, *)            = -1
   * indexOfAnyBut("", *)              = -1
   * indexOfAnyBut(*, null)            = -1
   * indexOfAnyBut(*, "")              = -1
   * indexOfAnyBut("zzabyycdxx", "za") = 3
   * indexOfAnyBut("zzabyycdxx", "")   = 0
   * indexOfAnyBut("aba","ab")         = -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
   * @since 2.0
   */
  public static int indexOfAnyBut(String str, String searchChars) {
    if (isEmpty(str) || isEmpty(searchChars)) {
      return -1;
    }
    for (int i = 0; i < str.length(); i++) {
      if (searchChars.indexOf(str.charAt(i)) < 0) {
        return i;
      }
    }
    return -1;
  }

  public static boolean isEmpty(String str) {
    return str == null || str.length() == 0;
  }

  public static boolean isArrayEmpty(char[] array) {
    if (array == null || array.length == 0) {
      return true;
    }
    return false;
  }

}


/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */



PreviousNext

Related