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

相关推荐
步行cgn10 分钟前
Spring 基于 XML 的自动装配:byType 详解
java·后端·spring
边境悍匪14 分钟前
蜗牛学苑 Java 智能体学习 Day46|贯穿项目 2 思维导图复盘
java·开发语言·vue.js·学习·spring
智慧物业老杨2 小时前
物业日常巡查的数智化重构:从“打卡式巡检“到“闭环式风控“
android·java·人工智能·系统架构·rxjava
晴天的雨.9923 小时前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
IvanCodes8 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
步行cgn9 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风9 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
aramae10 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路10 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog11 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis