通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
输入:dserwffwewfe
压缩规则:
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
package test;
import java.util.Scanner;
public class StrCompress {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);//接受键盘输入
char[]srcArray = scanner.nextLine().toCharArray();//将字符串转换为字符数组
char[] dstArray = new char[srcArray.length];
System.out.println("src="+String.valueOf(srcArray));
strCompress(srcArray,srcArray.length,dstArray);
System.out.println("dst="+String.valueOf(dstArray));
}
private static void strCompress(char[] srcArray, int length, char[] dstArray) {
// TODO Auto-generated method stub
int i = 0,k = 0;
while(i<length){//遍历
int count = 0;
char ch = srcArray[i];
count++;
int j = i+1;
while(j<length && ch==srcArray[j]){//统计重复次数
count++;
j++;
}
if(count!=1){
dstArray[k] = String.valueOf(count).charAt(0);//重复次数
dstArray[++k] = ch;//字符
}else{
dstArray[k] = ch;
}
k++;
i = j;
}
for(;k<length;){
dstArray[k++] = '#';
}
}
}
输入:dserwffwewfe
输出:
src=dserwffwewfe
dst=dserw2fwewfe