Java: Finding the Nth occurrence of a substring in a String
public static int ordinalIndexOf(String str, String substr, int n) {
int pos = -1;
do {
pos = str.indexOf(substr, pos + 1);
} while (n-- > 0 && pos != -1);
return pos;
}
ordinalIndexOf(s, ss, 0)
is equivalent to s.indexOf(ss)
ordinalIndexOf(s, ss, 1)
is equivalent to s.indexOf(ss, s.indexOf(ss) + 1)
and so on...
Example input / output
Expression | Result | Explanation |
---|---|---|
ordinalIndexOf("abcd abcd", "bc", 0) |
1 | The 0th occurrence is found at index 1 |
ordinalIndexOf("abcd abcd", "bc", 1) |
6 | The 1st (zero-based) occurrence is found at index 6 |
ordinalIndexOf("abcd abcd", "bc", 2) |
-1 | There's no 2nd (zero-based) occurrence, hence -1 is returned |
ordinalIndexOf("aaaaa", "aaa", 1) |
1 | Matches may overlap |
Apache Commons Lang
See StringUtils.ordinalIndexOf
Comments (3)
This is resulting in -1
by Ritu |
-1 indicates that the n:th (zero-based!) occurrence wasn't found. For example ordinalIndexOf("abab", "ab", 10)
returns -1.
Thanks, this was exactly what I wanted!
by Daniel |