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
相关产品推荐
相关产品推荐

