Dart中如何移除字符串列表内匹配日期格式的字符串元素
Dart 移除列表中符合
dd-MM-yyyy HH:mm格式日期字符串的实现方案 核心思路是通过严格的日期格式校验识别目标项,再做列表过滤,不推荐纯正则匹配(无法校验日期、时间值的合法性,容易出现误判)。
实现步骤
- 引入官方维护的
intl包用于日期格式解析,在项目pubspec.yaml中添加对应依赖即可,版本选择适配当前Dart/Flutter环境的稳定版。 - 实例化和目标格式完全匹配的
DateFormat对象,开启严格解析模式避免容错识别导致的误删。 - 调用列表的
where方法做过滤:所有能被严格解析为目标日期格式的元素直接排除,解析失败的非目标元素保留。
完整代码示例
import 'package:intl/intl.dart'; void main() { // 原始字符串列表示例 List<String> rawList = [ '产品说明书v1', '19-06-2022 12:37', '2022年6月19日通知', '31-12-2023 23:59', '01-01-2024 00:00', '测试报告-2024版', '32-13-2024 25:61' // 非法日期值,不属于有效目标项会被保留 ]; // 初始化严格匹配目标格式(日-月-年 时:分)的解析器 final targetDateFormat = DateFormat('dd-MM-yyyy HH:mm'); // 执行过滤 List<String> resultList = rawList.where((element) { try { // 严格解析成功,说明是要移除的目标日期项,返回false排除 targetDateFormat.parseStrict(element); return false; } catch (_) { // 解析失败,不属于目标格式项,返回true保留 return true; } }).toList(); // 输出过滤后的结果:[产品说明书v1, 2022年6月19日通知, 测试报告-2024版, 32-13-2024 25:61] print(resultList); }
注意事项
必须使用
parseStrict方法做解析,普通parse方法自带容错逻辑,会对格式有偏差、带多余字符的字符串做强制转换,容易误删非目标元素。
如果项目不允许引入额外依赖,也可以通过正则匹配格式+手动校验月/日/时/分的取值范围实现相同逻辑,但代码冗余度高,容易遗漏闰年2月天数、大小月天数这类边界场景,优先推荐使用intl包的解析方案。
内容的提问来源于stack exchange,提问作者Faris Shomali
相关产品推荐
相关产品推荐

