我一直在谷歌上搜索并试图找出lastIndexOf的行为,但无法真正找到它的答案......
我需要搜索一个可能很大的字符串,而且我肯定99%肯定标记,例如:</data>
将在它的末尾。我试图将其剥离并将一些额外的数据附加到字符串,然后再将其关闭。
现在我正在使用indexOf,但性能是我的首要任务,所以我在考虑使用lastIndexOf ......
有些Java专家能否确认lastIndexOf是否会从字符串的后面进行搜索?
示例:
xml = xml.substring(0, xml.lastIndexOf("</data>"));
xml+"<mystuff>hello world</mysruff>";
xml+"</data>";
答案 0 :(得分:10)
来自JavaDoc:
int lastIndexOf(String str,int fromIndex) 返回指定子字符串最后一次出现的字符串中的索引,从指定的索引开始向后搜索。
答案 1 :(得分:4)
基于the source found here,似乎lastIndexOf
从字符串的末尾开始遍历。为方便起见,下面张贴了一段摘录;注意减量操作,因为它跟踪i
和j
以找到最后一个匹配。
startSearchForLastChar: while (true) {
while (i >= min && source[i] != strLastChar) {
i--;
}
if (i < min) {
return -1;
}
int j = i - 1;
int start = j - (targetCount - 1);
int k = strLastIndex - 1;
while (j > start) {
if (source[j--] != target[k--]) {
i--;
continue startSearchForLastChar;
}
}
return start - sourceOffset + 1;
}
答案 2 :(得分:0)
来自Javadoc:
返回最后一次出现的字符串中的索引 指定的字符。对于ch的值,范围为0到0xFFFF (包括),返回的索引(以Unicode代码为单位)是最大的 值k使得:
this.charAt(k) == ch
是真的。对于ch的其他值,它是最大值k,使得:
this.codePointAt(k) == ch
是真的。在任何一种情况下,如果此字符串中没有出现此类字符, 然后返回-1。 从...开始向后搜索字符串 最后一个角色。
是的,确实如此。