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

Flutter如何拆分含任意长度|分隔符的字符串并展示在ListView

Dart 字符串拆分报错解决方案

错误原因

  • 拆分后的列表会产生空字符串,且第一个拆分得到的条款没有=符号,直接取下标[1]会触发数组越界报错
  • 若原始字符串中竖线前后存在空白、或者混杂全角半角竖线,会导致拆分结果残留无效字符

修复后代码

String wording = data['records'][0]['policies'][0]['policywording'];
// 匹配任意长度的连续全角/半角竖线拆分,适配所有竖线场景
List<String> wordings = wording.split(RegExp(r'[||]+'));
List<Map<String, String>> displayData = [];

for (var element in wordings) {
  // 清理当前项前后的空白、换行符
  String trimedEle = element.trim();
  // 过滤空的无效项
  if (trimedEle.isEmpty) continue;

  // 按=最多拆分为2段,避免内容本身包含=的场景被误拆分
  List<String> splited = trimedEle.split('=');
  if (splited.length == 1) {
    // 无=的项(比如首条住院政策)直接存入name,value留空
    displayData.add({'name': splited[0], 'value': ''});
  } else {
    displayData.add({
      'name': splited[0].trim(),
      // 拼接后续所有内容,兼容内容带=的特殊场景
      'value': splited.sublist(1).join('=').trim()
    });
  }
}

ListView 渲染逻辑

渲染时判断value是否为空,对应展示不同格式即可匹配预期效果:

ListView.builder(
  itemCount: displayData.length,
  itemBuilder: (context, index) {
    final item = displayData[index];
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Text(
        item['value']!.isEmpty 
            ? item['name']! 
            : '${item['name']} : ${item['value']}',
      ),
    );
  }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:24:04