字符编码小练习
如果有一连串的字符有许多重复的,需要进行压缩
实现字符的缩减 “aaaaaaabbbbbcerrrrggggggggsssssspoqqqqq”==> “a7b5cer4g8s6poq5”
分析:
1、需要获取每种出现的字符,并且知道出现的次数
2、然后将其字符和出现的次数拼接
3、注意:如果只出现一次,忽略次数,直接拼接
main方法
public static void main(String[] args) {
// 创建Scanner对象,实现键盘输入
Scanner input = new Scanner(System.in);
System.out.println("请输入一段字符串:");
//接收键盘输入的字符串
StringBuffer sb=new StringBuffer(input.nextLine());
//调用方法
print(sb);
}
print方法
public static void print(StringBuffer sb) {
//声明一个新的StringBuffer类型的字符串
StringBuffer result=new StringBuffer();
// 获取sb长度
int length = sb.length();
int count=1;//计数器
for (int i = 1; i < length; i++) {
//获取相邻位置字符
char charAt1 = sb.charAt(i-1);
char charAt2 = sb.charAt(i);
//判断相邻位置字符是否相等
if(charAt1==charAt2) {
count++;//如果相等计数器+1
}else {
result.append(charAt1);
if(count>=2) {
result.append(count);
}
//重置计数器
count=1;
}
//判断如果是最后一种字符,直接添加
if(i==length-1) {
result.append(charAt2);
if(count!=1) {
result.append(count);
}
}
}
System.out.println("压缩后:"+result);
}
运行结果
令一种实现方法思路:
在自定义方法里,声明两个数组(一个char类型和一个int类型),长度都为原字符串长度(如果没有相邻的字符相等的话,就和原字符串长度相等),遍历输入的内容。需要声明一个int变量记录每次遍历的下标,声明一个count记录字符出现的次数,而且也得考虑重置的问题。char[] 记录字符,如果相邻字符相等则只记录第一个,其他为空,int[] 记录count。最后一次需要额外添加,然后就是拼接对应下标上数组中的元素。
一个还在学习中的小白,没有撤退可言!!!