Dart中如何从类列表格式字符串提取两个日期子串?
解决Dart字符串提取日期子串的问题
以下是几种可行的实现方案,根据你的实际场景选择即可:
方案一:JSON解析法(推荐,容错性强)
你的字符串格式接近JSON数组,只需将单引号替换为双引号,就能用标准JSON解析工具处理,这是最安全的方式:
import 'dart:convert'; void main() { String stringSample = "['2022-11-24', '2022-11-30']"; // 替换单引号为双引号,转为合法JSON格式 String jsonStr = stringSample.replaceAll("'", '"'); // 解析为字符串列表 List<String> dateList = List<String>.from(jsonDecode(jsonStr)); String str1 = dateList[0]; String str2 = dateList[1]; print(str1); // 输出 2022-11-24 print(str2); // 输出 2022-11-30 }
优势:即使后续字符串包含转义字符或格式微调(比如空格变化),JSON解析也能正确处理,稳定性最高。
方案二:字符串分割法(简单直接,适合固定格式)
如果你的字符串格式完全固定,可通过字符串截取和分割快速提取:
void main() { String stringSample = "['2022-11-24', '2022-11-30']"; // 移除首尾的方括号 String innerContent = stringSample.substring(1, stringSample.length - 1); // 按', '分割成子串列表 List<String> parts = innerContent.split(', '); // 移除每个子串的单引号 String str1 = parts[0].replaceAll("'", ''); String str2 = parts[1].replaceAll("'", ''); print(str1); print(str2); }
优势:代码简洁,无需引入额外库;缺点:格式稍有变动(比如分隔符是',\n'或多余空格)就会失效。
方案三:正则表达式法(灵活匹配,适配格式变动)
如果外层格式可能存在变化,但日期格式固定为YYYY-MM-DD,用正则匹配最灵活:
void main() { String stringSample = "['2022-11-24', '2022-11-30']"; // 匹配YYYY-MM-DD格式的日期 RegExp datePattern = RegExp(r'\d{4}-\d{2}-\d{2}'); // 获取所有匹配结果 Iterable<Match> matches = datePattern.allMatches(stringSample); String str1 = matches.elementAt(0).group(0)!; String str2 = matches.elementAt(1).group(0)!; print(str1); print(str2); }
优势:只要日期格式不变,不管外层的括号、引号如何变化,都能准确提取日期。
内容的提问来源于stack exchange,提问作者Muhammed Ajmal
相关产品推荐
相关产品推荐

