例如:aaabbbccc压缩成为3a3b3c
方法一:
public static void main(String[] args) {
System.out.println("请输入一个字符串:");
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
//StringBuilder和StringBuffer都行,StringBuilder更快,但线程不安全
StringBuilder stringBuilder = new StringBuilder();
//StringBuffer stringBuffer = new StringBuffer();
if (" ".equals(string)){
System.out.println(1+" ");
return;
}
char ch = string.charAt(0);
int num = 1;
for (int i = 1; i < string.length(); i++) {
char chs = string.charAt(i);
if (ch == chs){
num++;
}else {
if (num>1){
stringBuilder.append(num);
//stringBuffer.append(num);
stringBuilder.append(ch);
num=1;
}else {
stringBuilder.append(num);
stringBuilder.append(ch);
}
}
ch = chs;
}
if (num==1){
stringBuilder.append(num);
}
stringBuilder.append(ch);
System.out.println(stringBuilder.toString());
return;
}
方法二:
public static void main(String[] args) {
//输入字符串
Scanner input = new Scanner(System.in);
String str = input.next();
//1.字符串分段
//1.1创建一个字符串数组,存放分割后的分段
List<String> strList = new ArrayList<>();
//1.2开始分段,逐个遍历str中的每一个字符
//当前字符与后一个字符不同时即分为不同的两段
//如果当前字符和后面一个字符相同,则录入当前分段中
String currentStr = "";//当前分段
for (int index = 0 ; index < str.length() - 1 ; index++){
char pre = str.charAt(index);
char next = str.charAt(index+1);
if (index != str.length()-2){
//如果没到倒数第二位
if (pre == next){
//当前字符和后一个字符相同,录入当前分段中
currentStr+=pre;
} else {
//当前字符与后一个字符不同时即分为不同的两段,将当前字符存入当前分段,并重新计算分段
currentStr+=pre;
//存入分段数组
strList.add(currentStr);
//将当前分段清空
currentStr = "";
}
} else {
//倒数第二位了
if (pre == next){
//如果最后两个字符相同,那么将这两位都加入到当前分段中
currentStr+=pre;
currentStr+=next;
strList.add(currentStr);
} else {
//如果这最后两个字符不同,那么将当前字符先存入当前分段,最后一个字符作为单独一段加入
currentStr+=pre;
//存入分段数组
strList.add(currentStr);
//将当前分段清空
currentStr = ""+next;
strList.add(currentStr);
}
}
}
//2.统计每段里面的字符和数量
//开始计数
for (String s : strList) {
//输出当前分段的字符个数
System.out.print(s.length());
//输出当前分段的字符
System.out.print(s.charAt(0));
}
}