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

Flutter:将.jpg后缀前的最后一个字符a替换为b

Flutter中替换.jpg后缀前最后一个a为b的实现方案

问题描述

我有多个.jpg格式的文件名字符串:

String a = '123a.jpg';
String b = '456asa.jpg';
String c = '789pa.jpg';

需要将每个字符串里.jpg后缀之前的最后一个字符a替换为b,得到如下结果:

String new_a = '123b.jpg';
String new_b = '456asb.jpg';
String new_c = '789pb.jpg';

实现方法

方法1:字符串拆分拼接(直观易懂)

通过拆分文件名前缀、定位最后一个a的位置,再拼接替换后的内容:

String replaceLastABeforeJpg(String filename) {
  // 先判断是否是.jpg结尾的文件
  if (!filename.endsWith('.jpg')) return filename;
  
  // 提取.jpg之前的前缀部分
  String prefix = filename.substring(0, filename.length - 4);
  // 找到前缀中最后一个a的索引
  int lastAIndex = prefix.lastIndexOf('a');
  
  // 如果没有找到a,直接返回原文件名
  if (lastAIndex == -1) return filename;
  
  // 替换最后一个a为b,再拼接.jpg后缀
  return '${prefix.substring(0, lastAIndex)}b.jpg';
}

// 调用示例
void main() {
  String a = '123a.jpg';
  String b = '456asa.jpg';
  String c = '789pa.jpg';
  
  String new_a = replaceLastABeforeJpg(a);
  String new_b = replaceLastABeforeJpg(b);
  String new_c = replaceLastABeforeJpg(c);
  
  print(new_a); // 输出: 123b.jpg
  print(new_b); // 输出: 456asb.jpg
  print(new_c); // 输出: 789pb.jpg
}

方法2:正则表达式替换(简洁高效)

利用正则表达式匹配.jpg结尾前的最后一个a,直接替换:

String replaceLastABeforeJpg(String filename) {
  // 正则匹配:后面紧跟.jpg结尾的a
  return filename.replaceFirst(RegExp(r'a(?=\.jpg$)'), 'b');
}

// 调用示例同上

说明

  • 两种方法都会对非.jpg结尾或不含a的字符串直接返回原内容,避免异常。
  • 方法1逻辑清晰,适合新手理解;方法2代码简洁,适合熟悉正则的开发者使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:36:07