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

