Java中如何统计单单词字符串内连续字符的出现次数?
解决连续字符统计问题的思路和代码修改方案
嘿,我来帮你搞定这个连续字符统计的问题!你的原代码之所以会把所有A算成一个整体,是因为它的逻辑是按字母表逐个统计整个字符串里该字符的总数量,而不是跟踪字符串里的连续字符段。要实现你要的连续统计效果,得换个思路——直接遍历字符串本身,跟踪当前连续的字符和它的计数。
核心逻辑步骤
- 先判断字符串是否为空,避免空指针异常;
- 初始化当前字符为字符串的第一个字符,计数器设为1;
- 从第二个字符开始遍历:
- 如果当前字符和前一个字符相同,计数器加1;
- 如果不同,就输出之前的计数和字符,然后更新当前字符为当前遍历到的字符,计数器重置为1;
- 遍历结束后,别忘了输出最后一组连续的字符和计数(因为循环里只有遇到不同字符才会输出,最后一组没触发输出)。
修改后的完整代码
public class ContinuousCharCount { public static void main(String[] args) { String alpha = "AAAABBCCCDAA"; // 处理空字符串的边界情况 if (alpha.isEmpty()) { return; } // 初始化当前连续字符和计数 char currentChar = alpha.charAt(0); int count = 1; // 从第二个字符开始遍历字符串 for (int i = 1; i < alpha.length(); i++) { char nextChar = alpha.charAt(i); if (nextChar == currentChar) { // 和当前字符相同,计数加1 count++; } else { // 遇到不同字符,输出前一段的统计结果 System.out.print(count + "" + currentChar); // 更新当前字符和计数 currentChar = nextChar; count = 1; } } // 输出最后一段连续字符的统计结果 System.out.print(count + "" + currentChar); } }
代码运行效果
这段代码运行后会输出你预期的结果:4A2B3C1D2A。它会逐段跟踪连续的字符,每遇到新的字符就结算前一段的统计,完美区分开头的4个A和末尾的2个A。
原代码问题复盘
你的原代码是遍历A-Z每个字母,然后在整个字符串里数该字母的总出现次数,相当于把所有相同字母的出现次数合并了,不管它们是不是连续的,所以才会得到6A2B3C1D这样的结果——它把开头和末尾的A加起来了,而不是分开统计连续段。
内容的提问来源于stack exchange,提问作者RamaKanta Bisipa
相关产品推荐
相关产品推荐

