0%

关于之前对java和JS中的String类的lastIndexOf方法的误解。

今天看JS的数组lastIndexOf()方法,看书上的例子,怎么看都觉得不对劲。后来详细读了几遍解释,用java也测试了下,才发现,之前的理解完全是错误的。

String nums="03454666574349";  
System.out.println(nums.lastIndexOf("4"));      //  )12  
System.out.println(nums.lastIndexOf("4", 4));   //  f)12    //t)4  
System.out.println(nums.lastIndexOf("4", 6));   //  f)12    //t)4  
System.out.println(nums.lastIndexOf("4", 11));  //  f)12    //t)10

f) 指明的是我之前的理解,是错误的。
t) 是正确的结果。

2. 之前的错误认识

以前以为 s.lastIndexOf(searchingObj, startIndex) 是从s的索引startIndex开始,往后找最后那个searchingObj索引,事实证明是错的。

JS的数组lastIndexOf方法也一样。

3. 正确的事实   

事实上,lastIndexOf方法被设定为:

  • startIndex开始 |看做把startIndex后面的全砍掉| ,再从后往前(逆向backward)寻找第一个searchingObj的位置;(有第二个参数startIndex时)
  • 从s.length-1索引开始(末尾), 从后往前(逆向backward)寻找第一个searchingObj的位置;(无第二个参数startIndex时)

再举个例子:
java:

String s=”012345678901234”;
System.out.println(s.lastIndexOf(“2”, 4));

相当于: String s=”012345678901234“;
1). 先找到起始索引4;
2). 砍/忽略掉后面的字符;
3). 从后往前找第一个: 得到结果:2

JS:

s=[0,1,2,3,4,5,6,7,8,9,0,1,2,3,4]

s.lastIndexOf(2,4)
2

—[2014-08-08]—