Java String index of any substring in an array

Description

Java String index of any substring in an array


//package com.demo2s;

public class Main {
  public static void main(String[] argv) throws Exception {
    String str = "demo2s.com";
    String[] searchStrs = new String[] { "abc", "def", "demo" };
    System.out.println(lastIndexOfAny(str, searchStrs));
  }//from   w  w w.  j  a v  a 2s.co  m

  /**
   * <p>
   * Find the latest index of any of a set of potential substrings.
   * </p>
   *
   * <p>
   * A <code>null</code> String will return <code>-1</code>. A <code>null</code>
   * search array will return <code>-1</code>. A <code>null</code> or zero length
   * search array entry will be ignored, but a search array containing "" will
   * return the length of <code>str</code> if <code>str</code> is not null. This
   * method uses {@link String#indexOf(String)}
   * </p>
   *
   * <pre>
   * lastIndexOfAny(null, *)                   = -1
   * lastIndexOfAny(*, null)                   = -1
   * lastIndexOfAny(*, [])                     = -1
   * lastIndexOfAny(*, [null])                 = -1
   * lastIndexOfAny("zzabyycdxx", ["ab","cd"]) = 6
   * lastIndexOfAny("zzabyycdxx", ["cd","ab"]) = 6
   * lastIndexOfAny("zzabyycdxx", ["mn","op"]) = -1
   * lastIndexOfAny("zzabyycdxx", ["mn","op"]) = -1
   * lastIndexOfAny("zzabyycdxx", ["mn",""])   = 10
   * </pre>
   *
   * @param str
   *          the String to check, may be null
   * @param searchStrs
   *          the Strings to search for, may be null
   * @return the last index of any of the Strings, -1 if no match
   */
  public static int lastIndexOfAny(String str, String[] searchStrs) {
    if ((str == null) || (searchStrs == null)) {
      return -1;
    }
    int sz = searchStrs.length;
    int ret = -1;
    int tmp = 0;
    for (int i = 0; i < sz; i++) {
      String search = searchStrs[i];
      if (search == null) {
        continue;
      }
      tmp = str.lastIndexOf(search);
      if (tmp > ret) {
        ret = tmp;
      }
    }
    return ret;
  }

  /**
   * <p>
   * Finds the last index within a String, handling <code>null</code>. This method
   * uses {@link String#lastIndexOf(int)}.
   * </p>
   *
   * <p>
   * A <code>null</code> or empty ("") String will return <code>-1</code>.
   * </p>
   *
   * <pre>
   * lastIndexOf(null, *)         = -1
   * lastIndexOf("", *)           = -1
   * lastIndexOf("aabaabaa", 'a') = 7
   * lastIndexOf("aabaabaa", 'b') = 5
   * </pre>
   *
   * @param str
   *          the String to check, may be null
   * @param searchChar
   *          the character to find
   * @return the last index of the search character, -1 if no match or
   *         <code>null</code> string input
   * @since 2.0
   */
  public static int lastIndexOf(String str, char searchChar) {
    if (isEmpty(str)) {
      return -1;
    }
    return str.lastIndexOf(searchChar);
  }

  /**
   * <p>
   * Finds the last index within a String from a start position, handling
   * <code>null</code>. This method uses {@link String#lastIndexOf(int, int)}.
   * </p>
   *
   * <p>
   * A <code>null</code> or empty ("") String will return <code>-1</code>. A
   * negative start position returns <code>-1</code>. A start position greater
   * than the string length searches the whole string.
   * </p>
   *
   * <pre>
   * lastIndexOf(null, *, *)          = -1
   * lastIndexOf("", *,  *)           = -1
   * lastIndexOf("aabaabaa", 'b', 8)  = 5
   * lastIndexOf("aabaabaa", 'b', 4)  = 2
   * lastIndexOf("aabaabaa", 'b', 0)  = -1
   * lastIndexOf("aabaabaa", 'b', 9)  = 5
   * lastIndexOf("aabaabaa", 'b', -1) = -1
   * lastIndexOf("aabaabaa", 'a', 0)  = 0
   * </pre>
   *
   * @param str
   *          the String to check, may be null
   * @param searchChar
   *          the character to find
   * @param startPos
   *          the start position
   * @return the last index of the search character, -1 if no match or
   *         <code>null</code> string input
   * @since 2.0
   */
  public static int lastIndexOf(String str, char searchChar, int startPos) {
    if (isEmpty(str)) {
      return -1;
    }
    return str.lastIndexOf(searchChar, startPos);
  }

  /**
   * <p>
   * Finds the last index within a String, handling <code>null</code>. This method
   * uses {@link String#lastIndexOf(String)}.
   * </p>
   *
   * <p>
   * A <code>null</code> String will return <code>-1</code>.
   * </p>
   *
   * <pre>
   * lastIndexOf(null, *)          = -1
   * lastIndexOf(*, null)          = -1
   * lastIndexOf("", "")           = 0
   * lastIndexOf("aabaabaa", "a")  = 0
   * lastIndexOf("aabaabaa", "b")  = 2
   * lastIndexOf("aabaabaa", "ab") = 1
   * lastIndexOf("aabaabaa", "")   = 8
   * </pre>
   *
   * @param str
   *          the String to check, may be null
   * @param searchStr
   *          the String to find, may be null
   * @return the last index of the search String, -1 if no match or
   *         <code>null</code> string input
   * @since 2.0
   */
  public static int lastIndexOf(String str, String searchStr) {
    if (str == null || searchStr == null) {
      return -1;
    }
    return str.lastIndexOf(searchStr);
  }

  /**
   * <p>
   * Finds the first index within a String, handling <code>null</code>. This
   * method uses {@link String#lastIndexOf(String, int)}.
   * </p>
   *
   * <p>
   * A <code>null</code> String will return <code>-1</code>. A negative start
   * position returns <code>-1</code>. An empty ("") search String always matches
   * unless the start position is negative. A start position greater than the
   * string length searches the whole string.
   * </p>
   *
   * <pre>
   * lastIndexOf(null, *, *)          = -1
   * lastIndexOf(*, null, *)          = -1
   * lastIndexOf("aabaabaa", "a", 8)  = 7
   * lastIndexOf("aabaabaa", "b", 8)  = 5
   * lastIndexOf("aabaabaa", "ab", 8) = 4
   * lastIndexOf("aabaabaa", "b", 9)  = 5
   * lastIndexOf("aabaabaa", "b", -1) = -1
   * lastIndexOf("aabaabaa", "a", 0)  = 0
   * lastIndexOf("aabaabaa", "b", 0)  = -1
   * </pre>
   *
   * @param str
   *          the String to check, may be null
   * @param searchStr
   *          the String to find, may be null
   * @param startPos
   *          the start position, negative treated as zero
   * @return the first index of the search String, -1 if no match or
   *         <code>null</code> string input
   * @since 2.0
   */
  public static int lastIndexOf(String str, String searchStr, int startPos) {
    if (str == null || searchStr == null) {
      return -1;
    }
    return str.lastIndexOf(searchStr, startPos);
  }

  /**
   * <p>
   * Checks if a String is empty ("") or null.
   * </p>
   *
   * <pre>
   * isEmpty(null)      = true
   * isEmpty("")        = true
   * isEmpty(" ")       = false
   * isEmpty("bob")     = false
   * isEmpty("  bob  ") = false
   * </pre>
   *
   * <p>
   * NOTE: This method changed in Lang version 2.0. It no longer trims the String.
   * That functionality is available in isBlank().
   * </p>
   *
   * @param str
   *          the String to check, may be null
   * @return <code>true</code> if the String is empty or null
   */
  public static boolean isEmpty(String str) {
    return str == null || str.length() == 0;
  }

}

/*
 * 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