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

Dart实现字符串拆分:提取数字后后缀并拆分单个字符

Dart字符串拆分:保留序数后缀为单独元素

需求很明确:将类似'byron48th'的字符串拆分为['b','y','r','o','n','4','8','th'],核心规则是数字后的nd/th/st这类序数后缀要作为单个元素拆分,其余字符逐个拆分。

实现代码

List<String> splitString(String input) {
  List<String> result = [];
  int index = 0;
  // 匹配目标序数后缀的正则
  final suffixRegex = RegExp(r'^(nd|th|st)$');

  while (index < input.length) {
    // 检查当前位置是否能取到两位后缀,且前一位是数字
    if (index >= 1 && index + 1 < input.length) {
      String candidate = input.substring(index, index + 2);
      if (suffixRegex.hasMatch(candidate) && RegExp(r'\d').hasMatch(input[index - 1])) {
        result.add(candidate);
        index += 2;
        continue;
      }
    }
    // 非后缀情况,单个字符加入结果
    result.add(input[index]);
    index += 1;
  }

  return result;
}

// 测试示例
void main() {
  final String title = 'byron48th';
  print(splitString(title)); // 输出: [b, y, r, o, n, 4, 8, th]
}

逻辑说明

  1. 遍历字符串时,优先检查从当前索引开始的两位字符是否是目标后缀(nd/th/st),同时确保前一个字符是数字——满足这两个条件就把这两位作为单个元素加入结果,索引直接加2跳过下一个字符。
  2. 如果不满足后缀条件,就把当前单个字符加入结果,索引加1继续遍历。
  3. 可以根据需求扩展suffixRegex,比如加上rd等其他序数后缀,只需要修改正则中的匹配项即可。

额外测试场景

  • 输入'jane23rd' → 输出['j','a','n','e','2','3','rd']
  • 输入'alice1st' → 输出['a','l','i','c','e','1','st']
  • 输入'test123' → 输出['t','e','s','t','1','2','3']

内容的提问来源于stack exchange,提问作者Mydul Islam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:16:00