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

相关推荐
蹦哒几秒前
Kotlin DSL 风格编程详解
android·开发语言·kotlin
枫叶丹42 分钟前
【HarmonyOS 6.0】ArkWeb 深度解读:getPageOffset20 与网页滚动偏移量获取能力的演进
开发语言·华为·harmonyos
独特的螺狮粉2 分钟前
开源鸿蒙跨平台Flutter开发:室内探险游戏应用
开发语言·flutter·游戏·华为·开源·harmonyos·鸿蒙
坏小虎3 分钟前
~/.zshrc 和 ~/.bash_profile 详细介绍与区别
开发语言·bash
_日拱一卒4 分钟前
LeetCode:矩阵置零
java·数据结构·线性代数·算法·leetcode·职场和发展·矩阵
weixin_408099678 分钟前
【实战教程】懒人精灵如何实现 OCR 文字识别?接口调用完整指南(附可运行示例)
java·前端·人工智能·后端·ocr·api·懒人精灵
独特的螺狮粉21 分钟前
开源鸿蒙跨平台Flutter开发:喝水时间提醒应用
开发语言·flutter·华为·信息可视化·开源·harmonyos·鸿蒙
花千树-01025 分钟前
Java Agent 集成 MCP 工具协议:让 AI 真正驱动企业系统
java·ai·langchain·ai agent·mcp·harness·j-langchain
橘子编程30 分钟前
GoF 23 种设计模式完整知识总结与使用教程
java·c语言·开发语言·python·设计模式
玖釉-32 分钟前
告别 Shared Memory 瓶颈:Vulkan Subgroup 架构解析与硬核实战指南
开发语言·c++·windows·图形渲染