Java String类中的lastIndexOf方法的应用场景

lastIndexOf(".") 是Java中 String 类的一个方法,用于查找字符串中最后一次出现指定字符的位置。在你的代码中,它被用来找到文件名中最后一个点(.)的位置,从而提取文件的扩展名。下面详细讲解这个方法的用法和原理。

方法签名

java 复制代码
public int lastIndexOf(int ch)
  • 参数
    • ch:要查找的字符的Unicode值。
  • 返回值
    • 返回指定字符在字符串中最后一次出现的索引位置(从0开始计数)。如果字符串中不存在该字符,则返回 -1

示例

假设我们有一个文件名字符串 example.jpg,我们调用 lastIndexOf(".") 方法来找到最后一个点(.)的位置:

java 复制代码
String originalFilename = "example.jpg";
int lastIndex = originalFilename.lastIndexOf(".");
System.out.println(lastIndex); // 输出:7

在这个例子中,lastIndexOf(".") 返回值是 7,因为点(.)在字符串 example.jpg 中的位置是第8个字符(索引从0开始计数)。

在你的代码中的应用

在你的代码中,lastIndexOf(".") 被用来提取文件的扩展名。具体步骤如下:

  1. 获取文件的原始名称

    java 复制代码
    String originalFilename = file.getOriginalFilename();
  2. 找到最后一个点(.)的位置

    java 复制代码
    int lastIndex = originalFilename.lastIndexOf(".");
  3. 提取文件的扩展名

    java 复制代码
    String suffix = originalFilename.substring(lastIndex);
详细解析
  • lastIndexOf(".")

    • 这个方法返回文件名中最后一个点(.)的位置索引。
    • 如果文件名中没有点(.),返回 -1
  • substring(lastIndex)

    • substring(int beginIndex) 方法从指定的索引位置开始截取字符串,直到字符串的末尾。
    • 如果 lastIndex-1,表示文件名中没有点(.),substring(-1) 会抛出 StringIndexOutOfBoundsException 异常。
    • 因此,在实际使用中,通常会先检查 lastIndex 是否为 -1,以避免异常。

完整示例

假设文件名是 example.jpg,代码运行过程如下:

  1. originalFilename = "example.jpg"
  2. lastIndex = originalFilename.lastIndexOf("."),返回 7
  3. suffix = originalFilename.substring(7),返回 .jpg

如果文件名是 example(没有扩展名),代码运行过程如下:

  1. originalFilename = "example"
  2. lastIndex = originalFilename.lastIndexOf("."),返回 -1
  3. 此时,需要额外处理,例如可以设置默认扩展名或返回空字符串。

安全性检查

为了避免异常,建议在使用 substring 之前检查 lastIndex 是否为 -1

java 复制代码
String originalFilename = file.getOriginalFilename();
int lastIndex = originalFilename.lastIndexOf(".");
String suffix;
if (lastIndex != -1) {
    suffix = originalFilename.substring(lastIndex);
} else {
    suffix = ""; // 或者设置默认扩展名,例如 ".txt"
}

总结

lastIndexOf(".") 是一个非常实用的字符串操作方法,用于查找字符串中最后一次出现指定字符的位置。在你的代码中,它被用来提取文件的扩展名,通过结合 substring 方法,可以方便地获取文件的扩展名部分。

相关推荐
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔7 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨10 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区12 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大12 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai13 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说13 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json