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

Flutter中用Dart编写相邻同字符计数函数 示例aabcddaabb=>2abc2d2a2b

Dart/Flutter 相邻同字符统计字符串转换实现

实现逻辑

按照转换规则,核心是逐位遍历字符串统计连续相同字符的长度,拼接时仅当连续长度大于1时才在字符前标注长度,长度为1时直接拼接字符即可,具体处理流程:

  • 空字符串直接返回空结果,做边界兼容
  • 初始化遍历状态:记录当前连续匹配的字符、连续计数,初始值取字符串首字符,计数初始为1
  • 从字符串第二个下标开始逐字符遍历:
    • 若当前字符和记录的匹配字符一致,连续计数累加1
    • 若不一致,将上一段统计结果拼接进最终字符串:连续计数>1时先拼接计数数字再拼接字符,计数为1时直接拼接字符;之后更新匹配字符为当前字符,计数重置为1
  • 遍历完成后,把最后一段未拼接的统计结果追加到最终字符串末尾,避免漏算最后一组连续字符

可直接使用的函数代码

String convertAdjacentCharStr(String input) {
  // 空字符串直接返回
  if (input.isEmpty) return '';
  final StringBuffer result = StringBuffer();
  String currentChar = input[0];
  int count = 1;

  for (int i = 1; i < input.length; i++) {
    final char = input[i];
    if (char == currentChar) {
      count++;
    } else {
      // 拼接上一段结果
      if (count > 1) {
        result.write(count);
      }
      result.write(currentChar);
      // 重置统计状态
      currentChar = char;
      count = 1;
    }
  }
  // 拼接最后一段结果
  if (count > 1) {
    result.write(count);
  }
  result.write(currentChar);

  return result.toString();
}

效果验证

调用示例:

void main() {
  // 官方示例输入
  const testInput = 'aabcddaabb';
  final output = convertAdjacentCharStr(testInput);
  print(output); // 控制台输出:2abc2d2a2b,和预期结果完全一致

  // 边界场景测试
  print(convertAdjacentCharStr('abcd')); // 输出abcd
  print(convertAdjacentCharStr('aaaa')); // 输出4a
  print(convertAdjacentCharStr('aabbbccdeee')); // 输出2a3b2cd3e
  print(convertAdjacentCharStr('a')); // 输出a
}

注:实现中用StringBuffer做拼接,比直接用字符串+拼接性能更好,长字符串场景下在Flutter应用中运行也不会有性能问题。

内容的提问来源于stack exchange,提问作者Sanaullah Niazi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:00:58