java压缩传输_简单实现字符串的压缩,减轻传输压力

首先说下字符串的压缩的大概意思:比如一字符串"asdfjsdffffffssddsfsdssss",其中有很多相邻的字符是相同的,那么可以通过一个合并,并记录个数的方式,来进行压缩,从而减少字符串的长度。

实现的方法有很多,下面主要讲解通过Map集合来实现这个功能:

学过java的人都知道,其实字符串的底层是由char数组来维持的,所以我们要先把字符串转换成字符数组。利用Map的键值对的特性,来存储相应的字符和对应的个数。代码如下:

public static String stringCondense(String str) {

Map map = new LinkedHashMap();

char[] charArray = str.toCharArray();

char start = charArray[0];

map.put(start + ":" + 0, 1);

String key = start + ":" + 0 ;

for (int i = 1; i < charArray.length; i++) {

if (charArray[i] == charArray[i - 1]) {

int value = map.get(key);

value++;

map.put(key, value);

} else {

key = charArray[i] + ":" + i;

map.put(charArray[i] + ":" + i, 1);

}

}

String result = "";

for (String s : map.keySet()) {

if (map.get(s) != 1) {

result = result + s.split(":")[0] + map.get(s);

} else {

result = result + s.split(":")[0];

}

}

return result;

}

有几个小注意点:

1.推荐使用LinkedMapHashMap,使用HashMap会有料想不到的收获哦!

2.因为map中key唯一,所有key最好加上当前位置,这样不会覆盖,同时也可以查看原来字符数组的排列顺序。

3.这个代码十分简单,如有不足,请多多包涵!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值