Dart从含多个点的文件名字符串提取扩展名仅取最后一段如何实现
问题原因
现有代码遍历文件名时遇到第一个.就开始记录后续所有字符,当文件名包含多个.时,会把第一个点之后的所有内容都判定为扩展名,无法匹配仅获取最后一段后缀的需求。
解决方案1:修改原有遍历逻辑
改为从后向前遍历文件名,找到第一个出现的.(即整个文件名的最后一个点)后直接截取后续内容:
var url = downloadUrl.toString(); String fileExtension = ''; String fileName = path.split("/").last; // 从后往前遍历定位最后一个.的位置 for (int i = fileName.length - 1; i >= 0; i--) { if (fileName[i] == '.') { fileExtension = fileName.substring(i); break; } }
如果文件名没有扩展名,fileExtension会保持空字符串,符合原有逻辑的边界处理。
解决方案2:使用path包内置方法(更推荐)
你当前代码已经引入了path库,可直接调用库内置的extension方法,原生支持获取最后一段文件扩展名,无需手动处理遍历逻辑:
var url = downloadUrl.toString(); String fileName = path.split("/").last; String fileExtension = path.extension(fileName);
该方法对多后缀场景的处理和边界兼容都经过官方验证,示例文件Screenshot_2021-06-10_co.com.app.jpg调用后直接返回.jpg,符合需求。
内容的提问来源于stack exchange,提问作者alonsso
相关产品推荐
相关产品推荐

