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 方法,可以方便地获取文件的扩展名部分。

相关推荐
我材不敲代码2 分钟前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
身如柳絮随风扬1 小时前
Java中的CAS机制详解
java·开发语言
韩立学长2 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
风筝在晴天搁浅2 小时前
hot100 78.子集
java·算法
froginwe113 小时前
Scala 循环
开发语言
m0_706653233 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你913 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Bruk.Liu3 小时前
(LangChain实战2):LangChain消息(message)的使用
开发语言·langchain
qq_423233903 小时前
C++与Python混合编程实战
开发语言·c++·算法
m0_715575344 小时前
分布式任务调度系统
开发语言·c++·算法