Java字符串压缩(知识点详解)

任务描述

本关任务:字符串压缩。若输入字符串: “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());
         
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值