Я согласен, что использование стандартного метода String.lastIndexOf () - ваш лучший способ действий, но я недавно использовал для части Regex (а именно, я хотел найти последний не буквенно-цифровой символ в строке).
Я закончил писать сам и думал поделиться, в надежде, что это поможет другим:
/**
* Indicates that a String search operation yielded no results.
*/
public static final int NOT_FOUND = -1;
/**
* Version of lastIndexOf that uses regular expressions for searching.
* By Tomer Godinger.
*
* @param str String in which to search for the pattern.
* @param toFind Pattern to locate.
* @return The index of the requested pattern, if found; NOT_FOUND (-1) otherwise.
*/
public static int lastIndexOfRegex(String str, String toFind)
{
Pattern pattern = Pattern.compile(toFind);
Matcher matcher = pattern.matcher(str);
// Default to the NOT_FOUND constant
int lastIndex = NOT_FOUND;
// Search for the given pattern
while (matcher.find())
{
lastIndex = matcher.start();
}
return lastIndex;
}
/**
* Finds the last index of the given regular expression pattern in the given string,
* starting from the given index (and conceptually going backwards).
* By Tomer Godinger.
*
* @param str String in which to search for the pattern.
* @param toFind Pattern to locate.
* @param fromIndex Maximum allowed index.
* @return The index of the requested pattern, if found; NOT_FOUND (-1) otherwise.
*/
public static int lastIndexOfRegex(String str, String toFind, int fromIndex)
{
// Limit the search by searching on a suitable substring
return lastIndexOfRegex(str.substring(0, fromIndex), toFind);
}
Кроме того, возможно сделать этот метод быстрее, сначала поменяв местами входную строку, а затем взяв конечный индекс первой группы (а не пройдя все группы).
Но чтобы сделать это, вам также придется изменить схему; это может быть просто в некоторых случаях (например, мой случай поиска одного символа), но может оказаться проблематичным в других.