转载

关于之前对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) 是正确的结果。

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

JS的 数组lastIndexOf 方法也一样。

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

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

再举个例子:

java:

String s="012345678901234";

相当于: String s="0123 4

5678901234

";

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)

---[2014-08-08]---

原文  https://segmentfault.com/a/1190000022342766
正文到此结束
Loading...