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

