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

Bash如何统计字符串连续字母重复次数并输出指定格式结果

Bash 统计字符串连续英文字母重复次数实现

完整可运行代码

直接用Bash原生语法即可实现,无需依赖第三方外部命令,代码如下:

#!/bin/bash
read -p 'enter the string' str

# 空输入直接返回空结果
if [[ -z $str ]]; then
    echo ""
    exit 0
fi

result=""
# 初始化基准字符为字符串第一位,初始计数为1
prev_char="${str:0:1}"
count=1

# 从第二位(索引1)开始逐位遍历字符串
for ((i=1; i<${#str}; i++)); do
    current_char="${str:i:1}"
    if [[ $current_char == "$prev_char" ]]; then
        # 当前字符和基准字符一致,计数累加
        ((count++))
    else
        # 字符变化时,把上一段的字符+计数拼入结果,重置基准和计数
        result+="${prev_char}${count}"
        prev_char="$current_char"
        count=1
    fi
done
# 补上循环结束后剩余的最后一段字符和计数
result+="${prev_char}${count}"

echo "$result"

常见for循环写法出错原因

之前写for循环拿不到正确结果,基本是踩了这几个坑:

  • 用for char in $str的写法遍历:这种写法会默认按空格拆分输入内容,只要输入带空格就会出现遍历逻辑错误,必须通过字符串索引逐位取字符才能保证遍历准确性
  • 漏了初始化逻辑:没有提前设置第一个基准字符和初始计数,第一次循环的判断分支就会出现空值对比的问题
  • 漏了循环结束后的收尾拼接:循环内只有字符发生变化时才会拼接上一段结果,字符串末尾的连续重复段不会在循环中被处理,这部分很容易被遗漏

效果验证

测试输入:AAASSSSFFRREEE
输出结果:A3S4F2R2E3,完全匹配预期
大小写区分测试:输入aaBBbccD,输出a2B2b1c2D1,可正确区分A-Z、a-z的大小写差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:54:21