为何这段StringBuilder字符串压缩代码无法输出预期结果?
字符串压缩功能的代码修正
原代码的问题
- count初始值错误:当前字符本身应算1次,原代码设为0会导致统计少1次
- 压缩逻辑错误:当字符重复次数大于1时,原代码重复追加字符,而非追加重复次数的数值
- 边界处理疏漏:未正确处理单个字符或末尾字符的统计
修正后的代码
import java.util.*; public class string_compression { public static String compress(String str){ // 空字符串直接返回 if(str.isEmpty()) return str; StringBuilder sb = new StringBuilder(); // 初始count为1,当前字符本身算一次 int count = 1; for(int i=0;i<str.length();i++){ // 检查下一个字符是否相同,同时避免越界 while(i < str.length()-1 && str.charAt(i) == str.charAt(i+1)){ count++; i++; } // 追加当前字符 sb.append(str.charAt(i)); // 重复次数大于1时追加次数 if(count > 1){ sb.append(count); } // 重置count为下一组字符做准备 count = 1; } return sb.toString(); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Enter your string: "); String str = sc.nextLine(); System.out.println("Compressed string is : "); System.out.println(compress(str)); sc.close(); } }
修正说明
- count初始化:将count初始值设为1,确保当前字符的首次出现被统计
- 压缩逻辑修正:当count>1时,追加的是count的数值,而非重复字符,实现正确的压缩格式(如"aaa"→"a3")
- 重置count:每处理完一组连续字符后,重置count为1,保证下一组字符统计正确
- 空字符串处理:增加空字符串判断,避免不必要的遍历
内容的提问来源于stack exchange,提问作者Yash Tambi
相关产品推荐
相关产品推荐

