输入一串字符,请编写一个字符串压缩程序,将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。
例如:
aac 压缩为 1ac
xxxxyyyyyyzbbb 压缩为 3x5yz2b
输入描述:
任意长度字符串 如 xxxxyyyyyyzbbb输出描述:
压缩后的字符串,即 3x5yz2b分析思路:
运用 StringBuffer 的 append() 方法来实现字符串的增加。
(1) 若 count 不为 0 ,则先将 count 加入到 sb中,然后再讲字符加入 sb 中。
(2) 若 count 为 0 ,则将字符加入 sb 中。
注意点:
对于例子xxxyyyyyyzbbb中,最后一个b 与它的前一个b相等,没有执行 else 语句,也就没有执行append() 方法。
import java.util.Scanner; public class Main { public static void main(String [] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); StringBuffer sb = new StringBuffer(); int count = 0;//统计相同字符的个数 for(int i=0; i< input.length() - 1; i++) { char c = input.charAt(i); char nextC = input.charAt(i+1); if(c == nextC) count++; else { if(count != 0) { sb.append(count); count = 0; } sb.append(c); } } if(count != 0) sb.append(count); sb.append(input.charAt(input.length()-1)); System.out.println(sb.toString()); } }方法二:字符串的直接相加,不适用StringBuffer.append() 方法。此方法对于字符串 "hello world"中的空格无效。。。
import java.util.Scanner; public class Main { public static void main(String [] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); int len = str.length(); char [] charArray = str.toCharArray();//定义一个数组,字符串转为数组 String newStr = "";//定义一个新的字符串 int count = 0;//统计重复数字的个数 for(int i=0; i<len-1; i++) { if(charArray[i]!=charArray[i+1]) { if(count > 0) { newStr = newStr + count;//字符串连接 count = 0; } newStr = newStr + charArray[i];//字符串连接 } else { count++; } } if(count != 0) newStr = newStr + count; newStr = newStr + charArray[len-1]; System.out.println(newStr); } }