Java中的lastIndexOf是否从String的结尾搜索?

时间:2011-11-16 21:00:16

标签: java string performance

我一直在谷歌上搜索并试图找出lastIndexOf的行为,但无法真正找到它的答案......

我需要搜索一个可能很大的字符串,而且我肯定99%肯定标记,例如:</data>将在它的末尾。我试图将其剥离并将一些额外的数据附加到字符串,然后再将其关闭。

现在我正在使用indexOf,但性能是我的首要任务,所以我在考虑使用lastIndexOf ......

有些Java专家能否确认lastIndexOf是否会从字符串的后面进行搜索?

示例:

xml = xml.substring(0, xml.lastIndexOf("</data>"));
xml+"<mystuff>hello world</mysruff>";
xml+"</data>";

3 个答案:

答案 0 :(得分:10)

来自JavaDoc

  

int lastIndexOf(String str,int fromIndex)             返回指定子字符串最后一次出现的字符串中的索引,从指定的索引开始向后搜索。

答案 1 :(得分:4)

基于the source found here,似乎lastIndexOf从字符串的末尾开始遍历。为方便起见,下面张贴了一段摘录;注意减量操作,因为它跟踪ij以找到最后一个匹配。

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。 从...开始向后搜索字符串   最后一个角色。

是的,确实如此。