我们得到一个字符串,说"itiswhatitis"
一个子字符串,说"is"
。我需要找到'i'
字符串"is"
在原始字符串中第二次出现时的索引。
String.indexOf("is")
在这种情况下将返回2。在这种情况下,我希望输出为10。
Answers:
使用的重载版本indexOf()
,该版本将起始索引(fromIndex)作为第二个参数:
str.indexOf("is", str.indexOf("is") + 1);
我正在使用: Apache Commons Lang:StringUtils.ordinalIndexOf()
StringUtils.ordinalIndexOf("Java Language", "a", 2)
int first = string.indexOf("is");
int second = string.indexOf("is", first + 1);
此重载开始从给定索引中查找子字符串。
string.indexOf("is", second + 1);
尽管制作返回Nth indexOf的方法可能会更好
您可以编写一个函数以返回出现位置的数组,Java具有String.regionMatches函数,这非常方便
public static ArrayList<Integer> occurrencesPos(String str, String substr) {
final boolean ignoreCase = true;
int substrLength = substr.length();
int strLength = str.length();
ArrayList<Integer> occurrenceArr = new ArrayList<Integer>();
for(int i = 0; i < strLength - substrLength + 1; i++) {
if(str.regionMatches(ignoreCase, i, substr, 0, substrLength)) {
occurrenceArr.add(i);
}
}
return occurrenceArr;
}
如果要查找两次以上的索引:
public static int ordinalIndexOf(String fullText,String subText,int pos){
if(fullText.contains(subText)){
if(pos <= 1){
return fullText.indexOf(subText);
}else{
--pos;
return fullText.indexOf(subText, ( ordinalIndexOf(fullText,subText,pos) + 1) );
}
}else{
return -1;
}
}