string.indexof()从左向右查找子串首次出现位置,lastindexof()从右向左查找最后一次出现位置,均返回索引(未找到为-1),区分大小写,空字符串分别返回0和字符串长度。

String.indexOf() 和 String.lastIndexOf() 是 Java 中用于查找子串在字符串中首次或最后一次出现位置的方法,返回索引值(从 0 开始),找不到则返回 -1。
indexOf:找第一次出现的位置
它从左往右搜索,支持多种重载形式:
-
indexOf(String str):查找子串首次出现的起始索引 -
indexOf(String str, int fromIndex):从指定位置开始向后查找 -
indexOf(int ch):查找单个字符(用 int 表示 char) -
indexOf(int ch, int fromIndex):从指定位置查找字符
例如:"hello world".indexOf("o") 返回 4(第一个 'o' 在索引 4);"hello world".indexOf("o", 5) 返回 7(从索引 5 开始找,找到第二个 'o')。
lastIndexOf:找最后一次出现的位置
它从右往左搜索,行为类似 indexOf,只是方向相反:
-
lastIndexOf(String str):查找子串最后一次出现的起始索引 -
lastIndexOf(String str, int fromIndex):从指定位置开始向前查找(注意:fromIndex 是搜索的“上限”,不是起点) - 同样支持字符查找的重载版本
例如:"hello world".lastIndexOf("o") 返回 7;"hello world".lastIndexOf("o", 5) 返回 4(在索引 0~5 范围内找最后一个 'o')。
关键细节要注意
两者都区分大小写,且空字符串 "" 的处理有特殊规则:
-
"abc".indexOf("")返回 0(空串在任意位置都算匹配,总是返回起始位置) -
"abc".lastIndexOf("")返回 3(字符串长度,即最后一个可插入空串的位置) - 传入 null 会抛出 NullPointerException
- fromIndex 超出范围时,方法会自动截断(如大于 length 则按 length 处理,小于 0 则按 0 处理)
实际使用小建议
做子串存在性判断时,别用 == true 或 != -1 混用,统一用 != -1 更安全;需要找所有匹配位置时,可在循环中结合 indexOf 的 fromIndex 参数递进查找。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











