Skip to content
Advertisement

How to search backward for substring of string (backword indexOf) starting from specific index

I would like to search for substring of string starting from specific index.

Let’s say I have string: "PO DAD PO PE DA X PO ZA RA"

Index from which I want to start is character X, so is 13. If I would like to search normally for ‘ZA’ I would do something like: "DAD PO PE DA X PO ZA RA ZA".indexOf("ZA") and I would get 18.

Next I want to search for first substring 'PO' but backward from "X" index. So, I would get 4 (as it is closer to X from left side) not 15.

How could I do this?

Advertisement

Answer

public static void main(String[] args) {
    String s = "PO DAD PO PE DA X PO ZA RA";
    System.out.println(usingSubstring(s));

    
    long start = System.currentTimeMillis();
    for (int i = 0; i < 10000; i++) {
        usingSubstring(s);
    }
    long end = System.currentTimeMillis();
    System.out.println("`usingSubstring()` took " + (end - start) + "ms.");
}


/**
 * 1. Get the first index of `X`.
 * 2. Substring from 0 ... (1).
 * 3. Get the last index from (2) for `PO`.
 *
 * @param s input string
 * @return last index of `PO` backwards from `X`
 */
private static int usingSubstring(String s) {
    String toSearch = "PO";
    String searchUntil = "X";
    return s.substring(0, s.indexOf(searchUntil)).lastIndexOf(toSearch);
}

Outputs:

7
`usingSubstring()` took 2ms.

Explained in code comments 🙂

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement