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
或正则表达式优化