indexOf 是 Java 中一个非常常用的字符串(String)方法,它的核心功能是查找某个字符或子字符串在当前字符串中首次出现的位置。

它的返回值是一个 int 类型的整数,这个整数的含义根据查找结果的不同而变化。
核心返回值规则
indexOf 方法主要有以下几种重载形式,但它们的返回值规则是一致的:
int indexOf(int ch)- 查找单个字符
ch在字符串中首次出现的位置。
- 查找单个字符
int indexOf(int ch, int fromIndex)- 从指定的
fromIndex位置开始,向后查找字符ch首次出现的位置。
- 从指定的
int indexOf(String str)- 查找子字符串
str在字符串中首次出现的起始位置。
- 查找子字符串
int indexOf(String str, int fromIndex)- 从指定的
fromIndex位置开始,向后查找子字符串str首次出现的起始位置。
- 从指定的
无论使用哪种形式,其返回值都遵循以下两条核心规则:
找到目标时
返回一个非负整数,表示目标字符或子字符串首次出现的索引(index)。

在 Java 中,字符串的索引从 0 开始。
示例:
String str = "Hello, World!";
// 查找字符 'o'
int index1 = str.indexOf('o'); // 'o' 首次出现在第 4 个位置
System.out.println("字符 'o' 的索引是: " + index1); // 输出: 4
// 查找子字符串 "World"
int index2 = str.indexOf("World"); // "World" 的起始 'W' 在第 7 个位置
System.out.println("子字符串 \"World\" 的索引是: " + index2); // 输出: 7
未找到目标时
返回 -1。
这是 indexOf 方法一个非常重要的设计特点,当在整个字符串(或从 fromIndex 开始的剩余部分)中找不到指定的字符或子字符串时,它会返回 -1。

示例:
String str = "Hello, World!";
// 查找不存在的字符 'z'
int index3 = str.indexOf('z');
System.out.println("字符 'z' 的索引是: " + index3); // 输出: -1
// 查找不存在的子字符串 "Java"
int index4 = str.indexOf("Java");
System.out.println("子字符串 \"Java\" 的索引是: " + index4); // 输出: -1
实际应用场景:判断子字符串是否存在
利用 indexOf 返回 -1 的特性,我们可以非常方便地判断一个字符串中是否包含另一个字符串。
最佳实践:
String text = "I love Java programming.";
String keyword = "Java";
// 使用 if 语句判断
if (text.indexOf(keyword) != -1) {
System.out.println("字符串中包含 \"" + keyword + "\"");
} else {
System.out.println("字符串中不包含 \"" + keyword + "\"");
}
// 更简洁的写法 (推荐)
if (text.indexOf(keyword) >= 0) {
System.out.println("字符串中包含 \"" + keyword + "\"");
} else {
System.out.println("字符串中不包含 \"" + keyword + "\"");
}
这两种写法在功能上是等价的,但 >= 0 的写法在语义上可能更清晰一些,因为它直接在判断“索引是否是一个有效的位置”。
补充:lastIndexOf 方法
Java 还提供了一个与 indexOf 对应的方法 lastIndexOf,顾名思义,它用于查找最后一次出现的位置。
lastIndexOf 的返回值规则与 indexOf 完全相同:
- 如果找到,返回最后一次出现的索引(非负整数)。
- 如果未找到,返回
-1。
示例:
String str = "This is a test. This is only a test.";
// 查找 "is" 最后一次出现的位置
int lastIndex = str.lastIndexOf("is");
System.out.println("子字符串 \"is\" 最后出现的索引是: " + lastIndex); // 输出: 23
| 查找结果 | indexOf 返回值 |
lastIndexOf 返回值 |
含义 |
|---|---|---|---|
| 找到目标 | 一个 >= 0 的整数 | 一个 >= 0 的整数 | 目标字符/子字符串的索引位置 |
| 未找到目标 | -1 | -1 | 表示字符串中不存在该目标 |
indexOf 在未找到时返回 -1 这个关键特性,它是在 Java 中进行字符串包含性检查最常用、最标准的方法之一。
