java字符串压缩
给你提供个思想
首先你这不是物理上的压缩,也就是说它是一个逻辑上的我们认同上的压缩。
你需要写一个算法来对你所要处理的数据进行统计,然后按照算法来改变结果。
最后达到一个后台的虚拟压缩(实际上不是压缩,只是算法)。
B. Java编写方法实现字符串压缩的功能,连续的 n 个字符 x 表示为 xn,例如 aaaa 表示为a4,
packagedemo1;
publicclassDemo2{
publicstaticStringreceString(finalStringstr){
StringBufferresult=newStringBuffer();
finalintcount=str.length();
charc1=str.charAt(0);
intsum=岁没1;
for(inti=1;i<count;i++){
charc2=str.charAt(i);
if(c1逗雀慧==c2)
{
sum++;
continue;
}
result.append(c1).append(sum);
c1=c2;
sum=1;
}
result.append(sum).append(c1);
returnresult.toString();
}山答
publicstaticvoidmain(String[]args){
System.out.println(receString("aaaaaaaabbbccdddeeebbba"));
}
}
C. java字符串经过bcd压缩后怎么传输
解决方法:
据我所知,您目前的做法是:
>使用getBytes(“UTF-8”)将String转换为字节数组.
>压缩字节数组
>使用新的String(字节,…,“UTF-8”)将压缩字节数组转换为String.
>传输压缩字符串
>接收压缩字符串
>使用getBytes(“UTF-8”)将压缩字符串转换为字节数组.
>解压缩字节数组
>使用新的String(bytes,…,“UTF-8”)将解压缩的字节数组转换为String.
这种方法的问题在于步骤3.压缩字节数组时,您创建的字节序列可能不再是没汪有效的UTF-8.结果将是步骤3中的例外.
解决方案是使用像Base64这样的“字节到字符”编码方案将压缩字节转换为可传输的字符串.换句话说,用调用Base64编码函数代替步骤3,用调用Base64解码函数代替步骤6.
笔记:
>对于小弦,压缩和
编码很可能实际上
增加传输字符串的大小.
>如果要将压缩的字符串合并到URL中,您可能希望为Base64选择不同的编码,以避免兆察缓需要进行URL转义的字符.
>根据您传输的数据的性质,您可能会发现特定于域的压缩比通用压缩更好.考虑在创建以逗号分隔的字符串之前压缩数据.考虑以逗号分隔的字符串的族模替代方法.
D. java,如何将字符串"12345678901212345678"压缩一下,使输出结果变短,并能反向解析
1. 可以考虑引入字符A~Z,加上0~9,形成36进制(更进一步可以大小写敏感,加上a~z,形成62进制);
2. 将上述字符串缓春败 除以36 取余;作为个位数;上述字符串 除以36 取整,作为结果,重复本步取余计算。
3. 获得结果。
4. 反向解析,将扰颤上述结果,分别按位数 乘以 36 ;
5. 最后合并相加,获得原森侍字符串。
E. 字符串压缩后变长
问的是字符串压缩后变长怎么解决吗?办法如下:
1、使用 StringBuilder,StringJoiner在构造时可键喊渣以指定一个分隔符(delimiter),然后每连接一个元素它便会加上一个delimiter。
2、使用StringJoiner,使用后formatList的代码更加的简洁了,渗基第一个参数为一个分隔符delimiter,第二个参稿悄数可以是一个Iterable,或者是一个变长参数的CharSequence,这样压缩后字符串会变短。
F. java如何将很长的字符串存储为压缩文件
String str = ""; int length = str.length(); List<Integer> index = new ArrayList<Integer>(); for (int i = 0; i < length - 1; i++) { if(str.charAt(i) != str.charAt(i + 1)){ index.add(i); } } if(str.charAt(length - 2) != str.charAt(length - 1)){ index.add(length - 1); } int start = 0; StringBuffer result = new StringBuffer(); for (int i = 0; i < index.size(); i++) { int end = index.get(i) + 1; if(i != 0){ start = index.get(i - 1) + 1; } String temp = str.substring(start, end); result.append(temp.charAt(0)).append(end - start); } System.out.println(result.toString());最终结果是:a6s4c5d7w1s1a3s1d1c1a1s1
G. 输入一串小写字母(a-z)组成的字符串,将连续字母压缩输出字符串,用Java实现
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();/咐并/dasdascasd
char[] chars = str.toCharArray();
char c = 0;
int j = 1;
for (int i = 0; i < chars.length; i++) {
char b = chars[i];
if (c!=b) {
if (j!=1) {
System.out.print(j);
}
System.out.print(c);
j = 1;/银链/初始化锋简孙j
}else{
j = j + 1;
}
c = b;
}
System.out.println(chars[chars.length-1]);
}
H. java 实现对字符串进行GSM(7bit)压缩编码后HEX 字符串输出
JAVA有一个public String(byte bytes[], Charset charset)函数可以用指定字节数组和编码来构造字符串。一个public byte[] getBytes(Charset charset)函数把字符串按指哗枯袜定编码来得到字节数组。可以用这两个函数来实现编码转换。
下面是一个简单的例子,注意一下例子中的文字本身的编码,最好在自己的环境中用gb2312重新输入,不然可能是乱码败雀。当然转换后输出肯定有一个是乱码,也肯能都是乱码。根据你的编辑器的编码格式有关。
public class EncodingTest{ public static void main(String[] args) { try { String gb = new String("乱激国标2312".getBytes(),"gb2312"); System.out.println(gb); byte [] b = gb.getBytes("gb2312"); String ios = new String(b,"ISO-8859-1"); System.out.println(ios); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }}