任务描述
本关任务:字符串压缩。若输入字符串: “aabbbccdaa” ,计算每个连续的字符的个数,并生成一个新的字符串:“a2b3c2d1a2”。
做题之前之前先介绍两个知识点:1.StringBuilder的用法.2.toString方法
StringBuilder是一个字符拼接的工具类,它和StringBuffer一样都继承自父类AbstractStringBuilder,在AbstractStringBuilder中使用char[] value字符数组保存字符串,但是没有用final关键字修饰,所以StringBuilder是可变的。
像这道题涉及到字符串的拼接,就需要用到StringBuilder
StringBuilder的创建:
StringBuilder builder = new StringBuilder();
也可以直接初始化,在括号里赋值初始字符串或者初始长度就是
比如:
StringBuilder builder = new StringBuilder("aaa");//初始字符串
StringBuilder builder = new StringBuilder(5);//初始长度
同时字符串的拼接涉及方法:append()
builder.append("aaa"),作用是在builder字符串后面添加数据,在加入新字符串时,不会在内存中新开辟字符串空间,只是给原有的字符串尾部加入新字符串.
toString()方法用于返回以一个字符串表示的num对象值,把string里的对象转变成int型,
OK有了上面的知识铺垫,下面做题:
若输入字符串: “aabbbccdaa” ,计算每个连续的字符的个数,并生成一个新的字符串:“a2b3c2d1a2”。
这是直接跟相邻的比较就可以,另外一种是只统计字符出现次数,比如“aabbbccdaa”,压缩成a4b3c2d1
思路就是用第n个字符去和第n+1个字符对比,相等则出现次数+1,不相等则拼接在字符串后面
详解在代码中展示
/*输入字符串:“aabbbccdaa” ,生成字符串:“a2b3c2d1a2”*/
import java.util.Scanner;
public class StringPress {
public static void main(String[] args) {
String s1=""; //s1表示输入的字符串,赋初值为空字符串
StringBuilder buffer = new StringBuilder();//创建buffer对象
Scanner sc = new Scanner(System.in);
System.out.println("输入一行字符");
s1 = sc.nextLine();//读入输入的字符
char ch; //表示s1中的一个字符
ch=s1.charAt(0);//先用第一个字符赋值
int num=1; //计算次数的,初始值为1
//统计s1中的字符,并将字符和该字符的个数连接到字符串buffer中
for(int k=1;k<s1.length();k++)
{
if(ch==s1.charAt(k)) //如果当前字符和下一个字符一样
{
num++; //结果次数+1
}
else
{
buffer.append(ch).append(num); //不一样则拼接在buffer后面,先字符再次数
ch=s1.charAt(k); //然后重置ch为当前字符
num=1; //结果次数重置为1
}
}
//因为循环条件是k<s1.length(),所以最后一个字符统计不到,输出的时候加上,最后别忘了toString
System.out.print("压缩后的字符串"+buffer.append(ch).append(num).toString());
}
}