1078 字符串压缩与解压(JAVA)

简介: 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。

 

文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba

解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc

本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。

输入格式:

输入第一行给出一个字符,如果是 C 就表示下面的字符串需要被压缩;如果是 D 就表示下面的字符串需要被解压。第二行给出需要被压缩或解压的不超过 1000 个字符的字符串,以回车结尾。题目保证字符重复个数在整型范围内,且输出文件不超过 1MB。

输出格式:

根据要求压缩或解压字符串,并在一行中输出结果。

输入样例 1:

C
TTTTThhiiiis isssss a   tesssst CAaaa as

image.gif

输出样例 1:

5T2h4is i5s a3 te4st CA3a as

image.gif

输入样例 2:

D
5T2h4is i5s a3 te4st CA3a as10Z

image.gif

输出样例 2:

TTTTThhiiiis isssss a   tesssst CAaaa asZZZZZZZ

image.gif

代码实现:

import java.io.*;
public class Main {
  public static void main(String[] args) throws IOException{
    // TODO Auto-generated method stub
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String chara = br.readLine();
    String str = br.readLine();
    if(chara.charAt(0)=='C') Compression(str);
    else if(chara.charAt(0)=='D') Decompression(str);
  }
  public static void Compression(String str) {
    char temp = str.charAt(0);          //默认char为 null
    int num = 0;
    for(int i=0;i<str.length();i++) {
      if(temp!=str.charAt(i)) {       //如果char不同
        if(num>1) System.out.print(num);  //多于1时加上数组
        System.out.print(temp);       //再加上字符
        num = 1;              //计数归1
        temp = str.charAt(i);
      }else num++;
    }
    if(num>1) System.out.print(num);      //因为我们把输出放在下一次循环里
    System.out.print(temp);           //所以最后还要输出一次
  }
  public static void Decompression(String str) {
    int num = 0;
    for(int i=0;i<str.length();i++) {
      char temp = str.charAt(i);
      if(temp>='0' && temp<='9') {
        num = num*10 + temp - '0';      //这么写是为了判断10以及更大的数字
      }else {
        if(num==0) System.out.print(temp);
        else {
          for(int j=0;j<num;j++) System.out.print(temp);
          num = 0;            //num 归零
        }
      }
    }
  }
}

image.gif

image.gif编辑

相关文章
|
6天前
|
前端开发 JavaScript Java
【前端学java】详解java中的字符串操作(11)
【8月更文挑战第10天】详解java中的字符串操作
10 3
【前端学java】详解java中的字符串操作(11)
|
3天前
|
Java API 开发者
|
5天前
|
Java
Java SpringBoot 7z 压缩、解压
Java SpringBoot 7z 压缩、解压
15 1
|
5天前
|
人工智能 Java 容器
十个Java字符串操作示例程序
十个Java字符串操作示例程序
5 1
|
8天前
|
存储 JavaScript Java
Java中未被初始化的字符串打印出“null”?
在Java中,未初始化的`String`变量默认值为`null`。打印此类变量时输出“null”,是因为`PrintStream`类中的`print`方法特别处理了`null`值,将其转换为字符串“null”。从JDK 17开始,`println`方法通过`String.valueOf`间接实现相同功能。当拼接包含`null`的字符串时,如`s1 + &quot;BLACK&quot;`,结果为“nullBLACK”,这是因为字符串构建过程中`StringBuilder`的`append`方法将`null`转换为“null”。
|
2天前
|
存储 安全 算法
Java中防止压缩炸弹的技术分享
【8月更文挑战第17天】在软件开发和数据处理的日常工作中,我们经常会遇到各种压缩文件。然而,一种被称为“压缩炸弹”的恶意文件却给开发者带来了不小的困扰。压缩炸弹通过特殊设计的压缩算法,使得极小的文件在解压后能膨胀到异常巨大的体积,从而消耗大量系统资源甚至导致系统崩溃。本文将围绕“如何在Java中防止压缩炸弹”这一主题,分享一些实用的技术干货。
9 0
|
4天前
|
Java 大数据 测试技术
Java对象头压缩---- 永久为Java应用“降本增效”
本文介绍了一下OpenJDK的最新技术,对象头压缩,来大幅优化Java对象的内存占用。
|
5天前
|
Java
Java中 字符串,字符串数组,整型数组初始化
Java中 字符串,字符串数组,整型数组初始化
6 0
|
3月前
|
存储 XML 缓存
Java字符串内幕:String、StringBuffer和StringBuilder的奥秘
Java字符串内幕:String、StringBuffer和StringBuilder的奥秘
42 0
|
3月前
|
存储 Java
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究