杰瑞科技汇

Java indexOf的返回值是什么?

indexOf 方法的返回值是一个 整数,它表示子字符串或字符在原字符串中首次出现的位置(索引)

Java indexOf的返回值是什么?-图1
(图片来源网络,侵删)
  • 成功找到:返回从 0 开始的索引值。
  • 未找到:返回一个固定的特殊值 -1

返回值的两种情况

找到子字符串或字符

indexOf 在字符串中成功找到了目标子串或字符时,它会返回该目标首次出现的字符的索引,这个索引是从 0 开始计算的。

示例:

String str = "Hello, World!";
// 查找字符 'W'
int index1 = str.indexOf('W');
System.out.println("字符 'W' 的索引是: " + index1); // 输出: 字符 'W' 的索引是: 7
// 查找子字符串 "World"
int index2 = str.indexOf("World");
System.out.println("子字符串 \"World\" 的索引是: " + index2); // 输出: 子字符串 "World" 的索引是: 7

解释: 在字符串 "Hello, World!" 中:

  • 'H' 的索引是 0
  • 'e' 的索引是 1
  • 'W' 的索引是 7

indexOf('W')indexOf("World") 都返回 7

Java indexOf的返回值是什么?-图2
(图片来源网络,侵删)

未找到子字符串或字符

indexOf 在整个字符串中都没有找到目标子串或字符时,它会返回 -1,这是一个非常重要的约定,在编程中经常被用来判断某个元素是否存在。

示例:

String str = "Hello, World!";
// 查找不存在的字符 'z'
int index1 = str.indexOf('z');
System.out.println("字符 'z' 的索引是: " + index1); // 输出: 字符 'z' 的索引是: -1
// 查找不存在的子字符串 "Java"
int index2 = str.indexOf("Java");
System.out.println("子字符串 \"Java\" 的索引是: " + index2); // 输出: 子字符串 "Java" 的索引是: -1

indexOf 的常用重载方法

String 类中提供了多个重载的 indexOf 方法,它们有不同的参数,但返回值的核心逻辑是一致的。

a. indexOf(int ch)

查找指定字符(ch第一次出现的位置。

  • 参数:一个字符(char),但以 int 类型传入,因为 char 在 Java 中是 int 的子集。
  • 返回值:字符的索引,或 -1
String str = "banana";
int index = str.indexOf('a'); // 'a' 首次出现在索引 1
System.out.println(index); // 输出: 1

b. indexOf(int ch, int fromIndex)

从指定的索引(fromIndex之后开始,查找字符 ch 第一次出现的位置。

  • 参数
    • ch: 要查找的字符。
    • fromIndex: 开始查找的起始索引(包含此索引)。
  • 返回值:字符的索引,或 -1
String str = "banana";
// 从索引 2 开始查找 'a',所以会找到索引 3 的 'a'
int index = str.indexOf('a', 2);
System.out.println(index); // 输出: 3

c. indexOf(String str)

查找指定子字符串(str第一次出现的位置。

  • 参数:一个子字符串。
  • 返回值:子字符串首字符的索引,或 -1
String str = "Hello Java, Hello World";
int index = str.indexOf("Java");
System.out.println(index); // 输出: 6

d. indexOf(String str, int fromIndex)

从指定的索引(fromIndex之后开始,查找子字符串 str 第一次出现的位置。

  • 参数
    • str: 要查找的子字符串。
    • fromIndex: 开始查找的起始索引(包含此索引)。
  • 返回值:子字符串首字符的索引,或 -1
String str = "Hello Java, Hello World";
// 从索引 10 开始查找 "Hello",所以会找到第二个 "Hello"
int index = str.indexOf("Hello", 10);
System.out.println(index); // 输出: 13

实际应用场景:检查子字符串是否存在

这是 indexOf 最常见的用法之一,通过判断返回值是否为 -1,可以高效地确定一个字符串是否包含另一个字符串。

public class IndexOfExample {
    public static void main(String[] args) {
        String url = "https://www.example.com";
        String protocol = "https://";
        String invalidProtocol = "ftp://";
        // 检查是否使用 HTTPS 协议
        if (url.indexOf(protocol) != -1) {
            System.out.println("该 URL 使用的是 HTTPS 协议。");
        } else {
            System.out.println("该 URL 不使用 HTTPS 协议。");
        }
        // 检查是否包含无效协议
        if (url.indexOf(invalidProtocol) == -1) {
            System.out.println("该 URL 不包含无效的 FTP 协议。");
        }
    }
}

输出:

该 URL 使用的是 HTTPS 协议。
该 URL 不包含无效的 FTP 协议。

lastIndexOf 的对比

Java 还提供了 lastIndexOf 方法,它的作用与 indexOf 相反。

  • indexOf:返回第一次出现的位置。
  • lastIndexOf:返回最后一次出现的位置。

它们的返回值规则相同:找到则返回索引(从0开始),找不到则返回 -1

示例:

String str = "abracadabra";
// 第一次出现 'a' 的位置
int firstIndex = str.indexOf('a');
System.out.println("第一次出现 'a' 的索引: " + firstIndex); // 输出: 0
// 最后一次出现 'a' 的位置
int lastIndex = str.lastIndexOf('a');
System.out.println("最后一次出现 'a' 的索引: " + lastIndex); // 输出: 10
// 查找不存在的字符
System.out.println("indexOf('z'): " + str.indexOf('z')); // 输出: -1
System.out.println("lastIndexOf('z'): " + str.lastIndexOf('z')); // 输出: -1

总结表格

方法 描述 返回值(找到) 返回值(未找到)
indexOf(int ch) 查找字符首次出现的位置 字符的索引 (>= 0) -1
indexOf(int ch, int fromIndex) 从指定位置之后查找字符首次出现的位置 字符的索引 (>= 0) -1
indexOf(String str) 查找子字符串首次出现的位置 子串首字符的索引 (>= 0) -1
indexOf(String str, int fromIndex) 从指定位置之后查找子字符串首次出现的位置 子串首字符的索引 (>= 0) -1
lastIndexOf(...) 查找字符/子字符串最后一次出现的位置 字符/子串首字符的索引 (>= 0) -1

记住这个核心原则:indexOf 返回的是索引,找不到就返回 -1,这是理解和使用该方法的关键。

分享:
扫描分享到社交APP
上一篇
下一篇