2011-11-16 71 views
4

我一直在搜索googling,并试图找出lastIndexOf的行为是什么,但无法真正找到答案...是否在String搜索结束时进行Java搜索?

我有一个潜在的大字符串,我需要搜索,并且我99%的肯定,标签,例如:</data>将在它的结尾。我试图剥去它并追加一些额外的数据到字符串,然后再关闭它。

现在,我使用的indexOf,但性能是我的首要任务在这里,所以我想用lastIndexOf的...

可能一些专家与Java确认是否lastIndexOf会从字符串的反向搜索?

实施例:

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

你知道源代码可用吗? –

+5

为什么你使用字符串操作来使用XML?使用XML API。哦,如果性能是你的首要任务,你不应该像这样执行多个字符串连接... –

+0

@DaveNewton不,直到现在我还不知道。很抱歉的新手问题... :( – codenamezero

回答

10

JavaDoc

INT lastIndexOf(字符串str,诠释的fromIndex) 返回此字符串的指定子最后一次出现处的索引,搜索开始向后指定索引处。

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; 
} 
0

Javadoc

返回此字符串的 指定字符最后一次出现处的索引。对于从0到0xFFFF (含)的范围内ch的值,该指数(以Unicode代码单元)返回是最大 值k,使得:

this.charAt(k) == ch 

是真实的。对于ch的其他值,它是最大的k值:

this.codePointAt(k) == ch 

是真实的。无论哪种情况,如果此字符串中不存在此类字符,则返回 ,然后返回-1。 字符串向后搜索,从 开始倒数​​第一个字符。

所以是的,它的确如此。