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

在Dart中如何将snake_case转换为普通句子

Dart 格式化字符串转普通句子实现方案

实现逻辑

无需区分输入是小驼峰还是蛇形命名格式,统一通过识别单词边界完成拆分,最终输出符合要求的普通句子,匹配示例转换规则:输入myNameIsJohnDoe 输出 My name is john doe。
核心处理步骤:

  • 统一识别所有单词边界:同时覆盖蛇形格式的下划线分隔位置、小驼峰格式中大写字母前的拆分位置
  • 将拆分得到的所有片段统一转为小写,过滤掉拆分后产生的空内容片段
  • 拼接单词时仅保留第一个单词的首字母为大写,其余内容全小写,单词间用普通空格分隔

可直接复用的实现代码

给String类扩展方法,基于Dart内置正则实现,无第三方依赖,所有环境可直接运行:

extension SentenceConverter on String {
  /// 将驼峰/蛇形命名字符串转换为可读普通句子
  String toReadableSentence() {
    // 匹配两类单词边界:下划线位置、大写字母前的位置
    final boundaryRegex = RegExp(r'_|(?=[A-Z])');
    final wordList = split(boundaryRegex)
        .map((word) => word.trim().toLowerCase())
        .where((word) => word.isNotEmpty)
        .toList();

    if (wordList.isEmpty) return this;
    // 首单词首字母大写,其余保持小写
    final firstWord = wordList.first;
    wordList[0] = '${firstWord[0].toUpperCase()}${firstWord.substring(1)}';
    return wordList.join(' ');
  }
}

实际效果

  • 对小驼峰输入myNameIsJohnDoe调用toReadableSentence(),输出完全匹配预期的My name is john doe
  • 对蛇形输入my_name_is_john_doe调用同一方法,输出结果和上面完全一致,不需要为两种格式单独编写转换逻辑
  • 自动过滤拆分产生的空片段,不会出现句子开头、结尾多余的空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 12:36:03