字符串压缩,压缩相邻字符

例如: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));
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值