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编辑

相关文章
|
14天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
132 83
|
1月前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
105 60
|
14天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
50 26
|
18天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
39 8
|
29天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
46 6
|
2月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
56 15
|
2月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
51 4
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
66 5
|
3月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
120 2
Java无需解压直接读取Zip文件和文件内容
package test; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.
1378 0