indexof从左向右查找首次匹配位置,lastindexof从右向左查找末次匹配位置;均返回索引值,未找到返回-1,支持指定起始下标搜索且不改变原字符串。

indexOf 和 lastIndexOf 是 Java 中 String 类提供的两个基础且高频的查找方法,用于定位子字符串或字符在原字符串中的位置。它们都返回 int 类型的索引值,找不到时统一返回 -1。
indexOf:从左往右找第一个匹配位置
它有四种重载形式,最常用的是:
-
str.indexOf(char ch)—— 查找指定字符首次出现的位置 -
str.indexOf(String sub)—— 查找子字符串首次出现的位置 -
str.indexOf(char ch, int fromIndex)—— 从指定下标开始向后查找字符 -
str.indexOf(String sub, int fromIndex)—— 从指定下标开始向后查找子字符串
注意:索引从 0 开始,fromIndex 超出字符串长度会直接返回 -1;若为负数,则从头开始查(等价于不带 fromIndex 的版本)。
示例:
"hello world".indexOf('o') → 4"hello world".indexOf("lo") → 3
"hello world".indexOf('o', 5) → 7
lastIndexOf:从右往左找最后一个匹配位置
用法和 indexOf 对应,只是搜索方向相反:
-
str.lastIndexOf(char ch)—— 查找字符最后一次出现的位置 -
str.lastIndexOf(String sub)—— 查找子字符串最后一次出现的位置 -
str.lastIndexOf(char ch, int fromIndex)—— 从指定下标开始向前查找字符(含该位置) -
str.lastIndexOf(String sub, int fromIndex)—— 从指定下标开始向前查找子字符串
关键点:fromIndex 是“搜索范围的右边界”,不是起始点;查找会从 fromIndex 往前(向索引 0 方向)进行,包含 fromIndex 本身。
示例:
"banana".lastIndexOf('a') → 5"banana".lastIndexOf("na") → 4
"banana".lastIndexOf('a', 3) → 1(只查索引 0~3,'a' 在位置 1)
常见使用技巧与注意事项
- 判断是否包含某内容:用
str.indexOf(sub) != -1,比str.contains(sub)更早兼容老版本 JDK - 查找所有匹配位置:可用循环 +
indexOf(sub, lastFound + 1)实现 - 区分大小写:这两个方法默认区分大小写;如需忽略,先统一转大小写再查(如
str.toLowerCase().indexOf(sub.toLowerCase())) - 空字符串
""的处理:"abc".indexOf("")返回0,"abc".lastIndexOf("")返回3(即字符串长度),这是符合规范的定义
简单对比记忆法
记两个关键词:
- index → 从左开始数,第一个匹配处
- lastIndex → 从右开始倒着数,最后一个匹配处
两者都不改变原字符串,也不抛异常,安全可靠,适合轻量级定位场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











