indexOf和lastIndexOf是String类用于查找子串首次和末次出现位置的方法,返回索引或-1;支持从指定位置查找、空字符串处理、大小写敏感等特性。

indexOf 和 lastIndexOf 是 Java 中 String 类提供的两个核心查找方法,用于定位子串在字符串中首次或最后一次出现的索引位置(从 0 开始计数)。它们不会修改原字符串,只返回整数结果。
indexOf:找第一次出现的位置
它有四种重载形式,最常用的是:
-
str.indexOf(sub):从开头开始查找子串sub首次出现的位置 -
str.indexOf(sub, fromIndex):从指定索引fromIndex(含)开始向后查找
如果找到,返回最小的匹配起始下标;没找到则返回 -1。例如:
"hello world".indexOf("o", 5) → 7(从索引 5 开始找,下一个 'o' 在 7)
"java".indexOf("z") → -1(不存在)
lastIndexOf:找最后一次出现的位置
对应地,它也提供两种常用重载:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
str.lastIndexOf(sub):从末尾向前找,返回最后一次出现的起始索引 -
str.lastIndexOf(sub, fromIndex):在[0, fromIndex]范围内从右往左查找(注意:不是从fromIndex开始向后)
同样,找不到时返回 -1。例如:
"banana".lastIndexOf("a", 3) → 1(在索引 0~3 范围内,最右边的 'a' 在索引 1)
使用时要注意的细节
- 空字符串
""是任意字符串的子串,str.indexOf("")永远返回0;str.lastIndexOf("")返回str.length() - 传入负数索引(如
indexOf(sub, -1)),会被自动视为0;超过长度的索引会按字符串长度处理 - 区分大小写:"
Hello".indexOf("h") 返回-1,因为 'h' ≠ 'H' - 查找单个字符可用
char参数重载(如indexOf('a')),效率略高于传字符串 "a"
实际小技巧:判断是否包含子串
虽然有 contains() 方法更直观,但用 indexOf() != -1 同样常见,尤其在需要位置信息时可复用结果:
int pos = s.indexOf("gram");
if (pos != -1) {
System.out.println("找到了,起始位置:" + pos); // 输出:6
}

















