题目描述:字符串压缩:“aabbccd” 输出“a2b2c2d1”
思路:定义两个变量,比如说是i和j,用i每次指向第一个不一样的字符,用j来遍历字符串,如果和i相等,计数器就加一,当j不等于i的时候,就将i指向的字符和次数加到新定义的字符串中,然后把j赋给i,i就指向的下一个不同的字符了。注意每次到了一个不同的字符计数器要初始化为开始的值,注意当最后一次i和就指向的内容相同时,就得将这个字符和它的次数加到字符串里,还要注意当最后是一个字符的时候,所以把j赋给i后应该判断该字符是否是最后一个,如果是,加入字符串中。
图解:
代码:
public class TestDemo {
public static String stringCompress(String str){
int i = 0;
int j = 1;
int count = 1;
String str6 = "";
StringBuilder stringBuilder = new StringBuilder() ;
for (;j < str.length(); j++) {
//charAt(int Index)为取得索引位置的字符
if (str.charAt(i) == str.charAt(j)) {
count++;
//最后的字符次数大于等于2时,应判断j是否到了字符串的最后,如果是,就加入到新的字符串中
if (j == str.length()-1) {
stringBuilder.append(str.charAt(i));
stringBuilder.append(count);
str6 = stringBuilder.toString();
}
} else {//当字符开始不同时,将前一个字符和次数加入到定义的字符串中,,再将j赋给i,进行下一次判断
stringBuilder.append(str.charAt(i));
stringBuilder.append(count);
str6 = stringBuilder.toString();
i = j;
count = 1;
//最后一个字符只有一次的情况
if (i == str.length()-1) {
stringBuilder.append(str.charAt(i));
stringBuilder.append(count);
str6 = stringBuilder.toString();
}
}
}
return str6 ;
}
public static void main(String[] args) {
String str5 = "aabbccdaac";
System.out.println(stringCompress(str5));
}
}