Java Array Last Index Of lastIndexOfAny(String str, String[] searchStrs)

Here you can find the source of lastIndexOfAny(String str, String[] searchStrs)

Description

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

A null String will return -1.

License

Open Source License

Parameter

Parameter Description
str the String to check, may be null
searchStrs the Strings to search for, may be null

Return

the last index of any of the Strings, -1 if no match

Declaration

public static int lastIndexOfAny(String str, String[] searchStrs) 

Method Source Code

//package com.java2s;
//License from project: Open Source License 

public class Main {
    /**//w ww  .j av  a2s. c o  m
     * <p>Find the latest index of any of a set of potential substrings.</p>
     * <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>
     * <p/>
     * <pre>
     * StrUtils.lastIndexOfAny(null, *)                   = -1
     * StrUtils.lastIndexOfAny(*, null)                   = -1
     * StrUtils.lastIndexOfAny(*, [])                     = -1
     * StrUtils.lastIndexOfAny(*, [null])                 = -1
     * StrUtils.lastIndexOfAny("zzabyycdxx", ["ab","cd"]) = 6
     * StrUtils.lastIndexOfAny("zzabyycdxx", ["cd","ab"]) = 6
     * StrUtils.lastIndexOfAny("zzabyycdxx", ["mn","op"]) = -1
     * StrUtils.lastIndexOfAny("zzabyycdxx", ["mn","op"]) = -1
     * StrUtils.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/>
     * <p>A <code>null</code> or empty ("") String will return <code>-1</code>.</p>
     * <p/>
     * <pre>
     * StrUtils.lastIndexOf(null, *)         = -1
     * StrUtils.lastIndexOf("", *)           = -1
     * StrUtils.lastIndexOf("aabaabaa", 'a') = 7
     * StrUtils.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/>
     * <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>
     * <p/>
     * <pre>
     * StrUtils.lastIndexOf(null, *, *)          = -1
     * StrUtils.lastIndexOf("", *,  *)           = -1
     * StrUtils.lastIndexOf("aabaabaa", 'b', 8)  = 5
     * StrUtils.lastIndexOf("aabaabaa", 'b', 4)  = 2
     * StrUtils.lastIndexOf("aabaabaa", 'b', 0)  = -1
     * StrUtils.lastIndexOf("aabaabaa", 'b', 9)  = 5
     * StrUtils.lastIndexOf("aabaabaa", 'b', -1) = -1
     * StrUtils.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/>
     * <p>A <code>null</code> String will return <code>-1</code>.</p>
     * <p/>
     * <pre>
     * StrUtils.lastIndexOf(null, *)          = -1
     * StrUtils.lastIndexOf(*, null)          = -1
     * StrUtils.lastIndexOf("", "")           = 0
     * StrUtils.lastIndexOf("aabaabaa", "a")  = 0
     * StrUtils.lastIndexOf("aabaabaa", "b")  = 2
     * StrUtils.lastIndexOf("aabaabaa", "ab") = 1
     * StrUtils.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/>
     * <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>
     * <p/>
     * <pre>
     * StrUtils.lastIndexOf(null, *, *)          = -1
     * StrUtils.lastIndexOf(*, null, *)          = -1
     * StrUtils.lastIndexOf("aabaabaa", "a", 8)  = 7
     * StrUtils.lastIndexOf("aabaabaa", "b", 8)  = 5
     * StrUtils.lastIndexOf("aabaabaa", "ab", 8) = 4
     * StrUtils.lastIndexOf("aabaabaa", "b", 9)  = 5
     * StrUtils.lastIndexOf("aabaabaa", "b", -1) = -1
     * StrUtils.lastIndexOf("aabaabaa", "a", 0)  = 0
     * StrUtils.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>
     * <p/>
     * <pre>
     * StrUtils.isEmpty(null)      = true
     * StrUtils.isEmpty("")        = true
     * StrUtils.isEmpty(" ")       = false
     * StrUtils.isEmpty("bob")     = false
     * StrUtils.isEmpty("  bob  ") = false
     * </pre>
     * <p/>
     * <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;
    }

    /**
     * Gets a String's length or <code>0</code> if the String is <code>null</code>.
     *
     * @param str a String or <code>null</code>
     * @return String length or <code>0</code> if the String is <code>null</code>.
     * @since 2.4
     */
    public static int length(String str) {
        return str == null ? 0 : str.length();
    }
}

Related

  1. LastIndexOfAny(String str, char[] search)
  2. lastIndexOfAny(String str, char[] searchChars, int startPos)
  3. lastIndexOfAny(String str, char[] targets)
  4. lastIndexOfAny(String str, String[] searchStrs)
  5. lastIndexOfAny(String str, String[] searchStrs)
  6. lastIndexOfAny(String string, char[] anyOf)
  7. lastIndexOfAnyNoCheck(byte[] values, byte[] array, int index, int length)
  8. lastIndexOfArray(int r[], int rpos, int rend, char d[], int dpos)
  9. lastIndexOfChars(String src, char[] chars, int startIndex, int endIndex)