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

