Java中的indexOf
和lastIndexOf
方法都用于在字符串中查找子字符串的位置,但它们之间存在一些关键差异:
- 查找方向:
indexOf
从字符串的开头开始查找子字符串,而lastIndexOf
则从字符串的末尾开始查找子字符串。如果未找到子字符串,indexOf
返回-1,而lastIndexOf
也返回-1。 - 查找次数:
indexOf
在找到子字符串后,会立即停止查找并返回当前位置。而lastIndexOf
则会继续向后查找,直到找到子字符串或到达字符串的末尾。因此,lastIndexOf
可能会返回子字符串在字符串中出现的所有位置中的最后一个。 - 参数顺序:
indexOf
方法的第一个参数是要查找的子字符串,第二个参数是可选的,表示从哪个索引位置开始查找。如果省略第二个参数,则从字符串的开头开始查找。而lastIndexOf
方法的第一个参数是要查找的子字符串,第二个参数也是可选的,表示从哪个索引位置开始查找。如果省略第二个参数,则从字符串的末尾开始查找。
需要注意的是,如果子字符串为空字符串,indexOf
会返回0,而lastIndexOf
会返回字符串的长度减1。
以下是一些示例代码,以帮助您更好地理解这两个方法的区别:
String str = "Hello, world!"; // 使用indexOf查找子字符串"world" int index1 = str.indexOf("world"); // 输出7 // 使用lastIndexOf查找子字符串"world" int index2 = str.lastIndexOf("world"); // 输出7 // 使用indexOf查找子字符串"WORLD"(不区分大小写) int index3 = str.indexOf("WORLD"); // 输出-1,因为字符串中不存在大写的"WORLD" // 使用lastIndexOf查找子字符串"WORLD"(不区分大小写) int index4 = str.lastIndexOf("WORLD"); // 输出7,因为字符串中最后一个出现的"WORLD"是大写的"WORLD" // 使用indexOf从索引位置5开始查找子字符串"world" int index5 = str.indexOf("world", 5); // 输出7,因为从索引位置5开始查找,第一个出现的"world"在索引7处 // 使用lastIndexOf从索引位置5开始查找子字符串"world" int index6 = str.lastIndexOf("world", 5); // 输出-1,因为从索引位置5开始向后查找,未找到子字符串"world"