项目场景:
例:有一字符串aabbccfafgt
,现需要寻找某字符串在改字符串中出现第n次的索引
如:返回出现第3次a的索引,正确应返回6;
返回出现第4次a的索引,正确应返回-1
解决方案:
方法一:使用indexOf
/**
* 寻找出现第n次字符的索引
* @param source 原始字符串
* @param target 匹配的字符串
* @param n 匹配的字符串第n个
* @return int
**/
private static int indexOfTarget(String source, String target, int n) {
int index = source.indexOf(target);
int i = 0;
while (index != -1) {
index = source.indexOf(target, index + i);
i++;
if (i == n) {
break;
}
}
return index;
}
方法二:使用匹配(Pattern、Matcher)
/**
*
* @param source 原始字符串
* @param target 匹配的字符串
* @param n 匹配的字符串第n个
* @return int
**/
private static int indexOfTarget(String source, String target, int n) {
Pattern pattern = Pattern.compile(target);
Matcher matcher = pattern.matcher(source);
int i = 0;
while (matcher.find()) {
i++;
if (i == n) {
break;
}
}
try {
return matcher.start();
} catch (IllegalStateException e) {
return -1;
}
}