当前位置: 首页 > news >正文

JAVA-字符串连续出现字母进行压缩

字符串连续出现的字母进行压缩

举例:输入为xxxyyyyyyz

压缩后为 3x6yz

解题思路:

通过在对输入字符串的遍历循环中借助一个StringBuffer变量sb进行字符串的拼接

在遍历中的firstChar每次都会取到没有遍历字符串中的第一个位置,一开始从位置0开始

for循环遍历也是从i=1开始,因为已经取了firstChar为第0个位置了

count变量初始值为1,是用来统计每一个字符的个数的,当s变量和firstChar变量相同时候,count+1

当出现了匹配的字符s和firstChar不同时候就开始判断count是否大于1,大于1就使用StringBuffer的append方法,拼接字符串

并且拼接完成之后,count重新归位1.

/**
 * @ Author zhangsf
 * @CreateTime 2019/11/22 - 10:14 PM
 */
package com.bjut.leetcode;

import java.util.Scanner;
public class ZipData {
    public static void main(String[] args) {
        System.out.println("请输入字符串:");
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        String rex =zipData(str);
        System.out.println(rex);
//        while (sc.hasNextLine()){
//            String str=sc.nextLine();
//            String rex =zipData(str);
//            System.out.println(rex);
//        }
    }
    public static String zipData(String str){
        StringBuilder sb= new StringBuilder();
        //字符串中第一个字符
        char firstChar=str.charAt(0);
        //字符数量默认为1
        int count=1;
        //数组下标从1开始
        for(int i = 1; i < str.length(); i++){
            char s=str.charAt(i);//字符串中第2个字符
            if(firstChar==s){//如果第1个字符和第2个相等,数量+1
                count++;
            }else{//如果第1个字符和第2个字符不相等
                if(count>1){//数量大于1
                    sb.append(count);//数量追加到StringBuilder中
                    sb.append(firstChar);//把第2个字符赋值给第一个字符的值追加到StringBuilder中  
                     System.out.println("当前的匹配的字符下标位置为"+i+"---"+s+"此时sb字符串为"+sb);
                    count=1;//重新初始化数量为1
                }else{//如果第1个字符和第2个字符不相等,并且数量不大于1,把第一个字符追加到StringBuilder中
                    sb.append(firstChar);
                }
            }
            firstChar=s;//把第2个字符赋值给第一个字符
        }
        if (count>1) {//如果数量大于1,把count追加到StringBuilder中
            sb.append(count);
        }
        sb.append(firstChar);//最后把字符追加到StringBuilder中
        return sb.toString();
    }
}


 

相关文章:

  • C语言-字符串连续出现字母进行压缩
  • C语言数组引用
  • c语言中二维数据的存储方式
  • C语言-注释符
  • C语言%d%c%f
  • C语言-定义一个字符串
  • 2019
  • Mac上配置SublimeText运行C语言
  • C语言-按规则读取指定文件(2016.七)
  • C语言-统计文本文件中字母出现次数
  • warning: this program uses gets(), which is unsafe.
  • Linux查看一个文件夹下所有文件大小
  • Windows下安装搭建NodeJS环境
  • vue与node和npm关系
  • Windows下安装搭建npm环境
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Hibernate最全面试题
  • iOS编译提示和导航提示
  • leetcode讲解--894. All Possible Full Binary Trees
  • Linux Process Manage
  • linux安装openssl、swoole等扩展的具体步骤
  • Linux快速复制或删除大量小文件
  • Object.assign方法不能实现深复制
  • PHP面试之三:MySQL数据库
  • Redis在Web项目中的应用与实践
  • Sequelize 中文文档 v4 - Getting started - 入门
  • supervisor 永不挂掉的进程 安装以及使用
  • TypeScript迭代器
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 高程读书笔记 第六章 面向对象程序设计
  • 规范化安全开发 KOA 手脚架
  • 记录一下第一次使用npm
  • 简单数学运算程序(不定期更新)
  • 码农张的Bug人生 - 初来乍到
  • 模型微调
  • 爬虫模拟登陆 SegmentFault
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 温故知新之javascript面向对象
  • 一个JAVA程序员成长之路分享
  •  一套莫尔斯电报听写、翻译系统
  • 译有关态射的一切
  • 智能合约开发环境搭建及Hello World合约
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (MATLAB)第五章-矩阵运算
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (十一)c52学习之旅-动态数码管
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (小白学Java)Java简介和基本配置
  • (一)80c52学习之旅-起始篇
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • ./configure,make,make install的作用
  • ./和../以及/和~之间的区别