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

相关推荐
SimonKing1 天前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean1 天前
Jackson View Extension Spring Boot Starter
java·后端
Seven971 天前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林5511 天前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河1 天前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程2 天前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅2 天前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者2 天前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺2 天前
搞懂@Autowired 与@Resuorce
java·spring boot·后端