You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Erlang中从文件名字符串获取扩展名(支持文件名含多圆点)

在Erlang中从文件名获取扩展名(支持含多个圆点的场景)

好问题!处理带多个圆点的文件名其实很常见,比如你提到的This.Great.Image.jpg,在Erlang里有两种靠谱的方法可以搞定这个需求,我来一步步说明:

方法一:借助标准库filename模块(推荐)

Erlang的filename模块专门用于处理文件路径和文件名,它已经帮我们考虑了各种边界情况(比如带路径的文件名、不同操作系统的路径格式),用它来获取扩展名最稳妥。

filename:extension/1函数会返回带前置圆点的扩展名,如果文件名没有扩展名则返回空字符串。我们只需要去掉前置的圆点就能得到纯扩展名:

get_file_ext(Filename) ->
    case filename:extension(Filename) of
        "" -> "";
        Ext -> string:substr(Ext, 2) % 移除开头的圆点
    end.

测试几个场景:

  • get_file_ext("This.Great.Image.jpg") → 返回 "jpg"
  • get_file_ext("/home/user/Documents.Report.pdf") → 返回 "pdf"
  • get_file_ext("README") → 返回 ""
  • get_file_ext(".bashrc") → 返回 ""(符合隐藏文件无扩展名的常规认知)
  • get_file_ext("file..txt") → 返回 "txt"

方法二:手动字符串处理

如果你想了解底层实现逻辑,也可以用字符串操作找到最后一个圆点的位置,再截取后面的内容:

get_file_ext(Filename) ->
    case string:rstr(Filename, ".") of
        0 -> ""; % 没有找到圆点,无扩展名
        Pos ->
            % 检查圆点是否在开头(比如隐藏文件)
            if Pos =:= 1 -> "";
               true -> string:substr(Filename, Pos + 1)
            end
    end.

这个方法的核心是string:rstr/2,它会返回字符串中最后一个匹配圆点的索引。我们额外加了判断,如果圆点在第一个位置(比如.gitignore),就返回空字符串,避免把隐藏文件名当成扩展名。

总结

优先用filename模块的方法,因为它是Erlang官方提供的工具,能处理更多你没考虑到的边缘情况,代码也更简洁易维护。

内容的提问来源于stack exchange,提问作者Jon Riel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:20:09