indexOf 是 Java String 类(以及一些其他类,如 ArrayList)中的一个常用方法,其主要作用是查找某个子字符串或字符在字符串中首次出现的位置。

核心结论(一句话总结)
indexOf 方法返回的是目标子字符串或字符首次出现的起始索引(index),如果找不到,则返回 -1。
详细说明
indexOf 方法有几种常见的重载形式,但它们的返回值规则是相同的。
int indexOf(String str)
查找参数字符串 str 在当前字符串中首次出现的位置。
- 成功时:返回
str的第一个字符在当前字符串中的索引,索引从 0 开始。 - 失败时:如果当前字符串不包含
str,则返回 -1。
示例代码:

public class IndexOfExample {
public static void main(String[] args) {
String sentence = "Hello, welcome to the world of Java.";
// 情况1:子字符串存在
int index1 = sentence.indexOf("welcome");
System.out.println("子字符串 'welcome' 的索引是: " + index1); // 输出: 7
// 情况2:子字符串不存在
int index2 = sentence.indexOf("Python");
System.out.println("子字符串 'Python' 的索引是: " + index2); // 输出: -1
// 情况3:查找单个字符
int index3 = sentence.indexOf('J');
System.out.println("字符 'J' 的索引是: " + index3); // 输出: 31
// 情况4:查找不存在的字符
int index4 = sentence.indexOf('z');
System.out.println("字符 'z' 的索引是: " + index4); // 输出: -1
}
}
int indexOf(String str, int fromIndex)
从指定的索引 fromIndex 开始,向后查找子字符串 str 的首次出现位置。
- 成功时:返回
str的第一个字符在当前字符串中的索引。 - 失败时:如果从
fromIndex开始向后查找没有找到str,则返回 -1。
重要提示:
fromIndex是包含的,即查找会从fromIndex这个位置开始检查。fromIndex的值大于或等于字符串的长度,方法会直接返回 -1。fromIndex是负数,其行为与0相同(从开头查找)。
示例代码:
public class IndexOfFromIndexExample {
public static void main(String[] args) {
String sentence = "one two one three one";
// 从索引 4 开始查找 "one"
// 从 "two one three one" 中查找,"one" 出现在索引 7
int index1 = sentence.indexOf("one", 4);
System.out.println("从索引 4 开始查找 'one',结果是: " + index1); // 输出: 7
// 从索引 10 开始查找 "one"
// 从 "three one" 中查找,"one" 出现在索引 14
int index2 = sentence.indexOf("one", 10);
System.out.println("从索引 10 开始查找 'one',结果是: " + index2); // 输出: 14
// 从索引 20 开始查找 "one" (索引 20 超出字符串长度)
int index3 = sentence.indexOf("one", 20);
System.out.println("从索引 20 开始查找 'one',结果是: " + index3); // 输出: -1
}
}
int indexOf(int ch) 和 int indexOf(int ch, int fromIndex)
这是查找单个字符的版本。ch 是字符的 Unicode 值。
- 成功时:返回字符
ch在字符串中首次出现的索引。 - 失败时:返回 -1。
示例代码:
public class IndexOfCharExample {
public static void main(String[] args) {
String str = "programming";
// 查找字符 'g' 首次出现的位置
int index1 = str.indexOf('g');
System.out.println("字符 'g' 的首次索引是: " + index1); // 输出: 3
// 从索引 4 开始查找字符 'g'
int index2 = str.indexOf('g', 4);
System.out.println("从索引 4 开始查找 'g',结果是: " + index2); // 输出: 10
}
}
返回值 -1 的实际应用
返回 -1 是 indexOf 方法最重要的特性之一,它提供了一种简单、优雅的方式来判断一个字符串是否包含另一个字符串,而无需使用正则表达式。
核心思想:
indexOf的返回值不等于 -1,则表示包含;如果等于 -1,则表示不包含。
示例:判断用户输入是否合法
import java.util.Scanner;
public class ValidateInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个用户名(不能包含空格): ");
String username = scanner.nextLine();
// 检查 username 中是否包含空格 " "
if (username.indexOf(" ") == -1) {
System.out.println("用户名合法: " + username);
} else {
System.out.println("用户名非法:不能包含空格!");
}
}
}
在这个例子中,username.indexOf(" ") 会返回空格字符的索引,如果字符串中没有空格,它就会返回 -1,通过 == -1 的判断,我们就能清晰地知道用户是否输入了空格。
总结表格
| 方法签名 | 功能描述 | 成功返回值 | 失败返回值 |
|---|---|---|---|
indexOf(String str) |
查找 str 在字符串中首次出现的位置。 |
str 的起始索引(int 类型)。 |
-1 |
indexOf(String str, int fromIndex) |
从 fromIndex 位置开始,查找 str 的首次出现位置。 |
str 的起始索引(int 类型)。 |
-1 |
indexOf(int ch) |
查找字符 ch 在字符串中首次出现的位置。 |
ch 的索引(int 类型)。 |
-1 |
indexOf(int ch, int fromIndex) |
从 fromIndex 位置开始,查找字符 ch 的首次出现位置。 |
ch 的索引(int 类型)。 |
-1 |
记住这个核心规则:找到了就返回位置(从0开始),找不到就返回-1,这是理解和使用 indexOf 方法的基石。
