Java基础(字符串的压缩和解压)

    科技2022-08-07  112

    public static void main(String[] args) { System.out.println(zip("aaasabbccccdddddddddddd")); System.out.println(unzip("3asabb4cd")); } //aaasabbccccd-->3asabb4cd static String zip(String s){ //用来记录字符连续出现次数 int repeatTime = 1; //上次所取的字符 char beforeChar = s.charAt(0); //当前所取到的字符 char currentChar = 0; //用来存储压缩的字符串 StringBuilder sb = new StringBuilder(); for(int i = 1;i<s.length();i++){ currentChar = s.charAt(i); //判断当前字符跟上次字符是否相同 if(currentChar==beforeChar){ repeatTime++; continue; } //用来处理重复次数为2或1的情况 if(repeatTime<=2){ while(repeatTime>0){ sb.append(beforeChar); repeatTime--; } }else{ sb.append(repeatTime+""+beforeChar); } repeatTime = 1; beforeChar = currentChar; } //处理最后一个字符 if(repeatTime<=2){ while(repeatTime>0){ sb.append(currentChar); repeatTime--; } }else{ sb.append(repeatTime+""+currentChar); } return sb.toString(); } //123asa3b4c12d static String unzip(String s){ char c; String digital = "0"; StringBuilder sb = new StringBuilder(); for(int i = 0;i<s.length();i++){ c = s.charAt(i); if(c>='0'&&c<='9'){ //为了获取连续出现的数字型字符串 digital+=c; }else if(c>='a'&&c<='z'){ //把数字型字符串转为数字,数字用来决定连续出现的c要向sb中拼接多少次 int d = Integer.valueOf(digital); sb.append(c); for(int j = 0;j<d-1;j++){ sb.append(c); } //接下来要处理一下个字符,所以下个字符出现的次数要重置为0 digital="0"; }else{ System.out.println("error!"); return null; } } return sb.toString(); }
    Processed: 0.010, SQL: 8