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

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

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

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

public static String stringCondense(String str) {
        Map<String, Integer> map = new LinkedHashMap<String, Integer>();
        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.这个代码十分简单,如有不足,请多多包涵!!!

 

转载于:https://my.oschina.net/u/2931572/blog/758746

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值