1. 方法概述

lastIndexOf() 是 Java String 类中用于查找字符或子字符串最后一次出现位置的核心方法。这个方法特别适合需要从字符串尾部开始搜索的场景,比如解析文件路径、处理日志记录等。

⚠️ 关键点

  • 当传入 int 参数时,实际搜索的是对应的 Unicode 字符
  • 支持指定起始搜索位置,实现反向区间搜索
  • 未找到目标时返回 -1,这是 Java 字符串搜索的通用约定

2. 方法签名

该方法提供三种重载形式,覆盖不同使用场景:

public int lastIndexOf(int ch)                    // 查找字符最后出现位置
public int lastIndexOf(int ch, int fromIndex)     // 从指定位置反向查找字符
public int lastIndexOf(String str)                // 查找子字符串最后出现位置

使用建议

  • 优先使用 String 参数版本,代码可读性更高
  • 需要精确控制搜索范围时使用带 fromIndex 的版本
  • 避免混淆 ch=111(字符 'o')和 str="111"

3. 实战示例

下面通过测试用例展示典型用法,注意字符和字符串参数的等价性:

@Test
public void whenCallLastIndexOf_thenCorrect() {
    // 查找子字符串 'o' 最后出现位置
    assertEquals(2, "foo".lastIndexOf("o"));  
    
    // 查找 Unicode 111(即字符 'o')最后出现位置
    assertEquals(2, "foo".lastIndexOf(111));     
}

🔍 执行结果分析
| 方法调用 | 目标字符串 | 返回值 | 说明 | |-----------------------|------------|--------|--------------------------| | "foo".lastIndexOf("o") | "o" | 2 | 最后一个 'o' 在索引 2 | | "foo".lastIndexOf(111) | 'o' | 2 | Unicode 111 对应字符 'o' |

4. 踩坑指南

实际开发中需要特别注意这些边界情况:

常见错误

// 错误示例:混淆字符和字符串
"123".lastIndexOf(1)    // 返回 0(查找字符 '1')
"123".lastIndexOf("1")  // 返回 0(查找字符串 "1")

正确姿势

// 明确参数类型
String path = "/var/log/app.log";
int lastSlash = path.lastIndexOf('/');      // 返回 8
int extStart = path.lastIndexOf('.');       // 返回 12

⚠️ 性能提示

  • 对超长字符串(>1MB)使用时,优先指定 fromIndex 缩小搜索范围
  • 频繁调用建议改用 StringBuilder 或正则表达式优化