lastIndexOf
lastIndexOf() 方法有四种形式:
返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
语法
public int lastIndexOf(int ch)
或
public int lastIndexOf(int ch, int fromIndex)
或
public int lastIndexOf(String str)
或
public int lastIndexOf(String str, int fromIndex)
参数
- ch – 字符。Unicode 编码。如a-97
- fromIndex – 开始搜索的索引位置。
- str – 要搜索的子字符串。
返回值
指定子字符串在字符串中第一次出现处的索引值。
实例
public class Test {
public static void main(String args[]) {
String str = "hello";
System.out.println(str.lastIndexOf( "l" ));
}
}
以上程序执行结果为:
3
源码
static int lastIndexOf(char[] source, int sourceOffset, int sourceCount,
char[] target, int targetOffset, int targetCount,
int fromIndex) {
/*
* Check arguments; return immediately where possible. For
* consistency, don't check for null str.
*/
int rightIndex = sourceCount - targetCount;//最大边界计算
if (fromIndex < 0) {//异常传参处理
return -1;
}
if (fromIndex > rightIndex) {//偏移量大于最大边界
fromIndex = rightIndex;
}
/* Empty string always matches. */
if (targetCount == 0) {//空字符串返回偏移值
return fromIndex;
}
int strLastIndex = targetOffset + targetCount - 1;//最后索引
char strLastChar = target[strLastIndex];
int min = sourceOffset + targetCount - 1;
int i = min + fromIndex;
startSearchForLastChar:
while (true) {
while (i >= min && source[i] != strLastChar) {
i--;
}
if (i < min) {
return -1;
}
int j = i - 1;
int start = j - (targetCount - 1);
int k = strLastIndex - 1;
while (j > start) {
if (source[j--] != target[k--]) {
i--;
continue startSearchForLastChar;
}
}
return start - sourceOffset + 1;
}
}
先处理边界值,再从后往前判断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY