美文网首页
字典序列化

字典序列化

作者: galaxy_zheng | 来源:发表于2019-10-10 18:16 被阅读0次

    我们程序中⽤用到了了⼀一个数组 a ,数组的每个元素都是⼀一个字(map/dict)。
    字典的 key/value 都是字符串串,字符串串中可包含任意字符。
    示例例:
    a[0]["k1"] = "v1"
    a[0]["k2"] = "v2"
    a[1]["A"] = "XXX"
    实际使用过程中,我们自定义了一个基于字符串串的存储结构,数组元素之间用“\n”分割,字典元素之间使用“ ; ”分割, key/value 之间用“=”分割。
    上述数据序列列化之后,应该得到一个字符串串:
    "k1=v1;k2=v2\nA=XXX"
    请实现⼀一个“保存”函数、一个“加载”函数。
    text = store(a); //把数组保存到⼀一个字符串串中
    a = load(text); //把字符串串中的内容读取为字典数组
    请考虑所有边界情况,不不要出现bug。在满足上述需求的前提下,可自行增加一些规则和约定。

      /**
         * 测试
         */
        private void test() {
            Map<String, String> map = new HashMap<>();
            map.put("k1", "v1");
            map.put("k2", "v2");
            Map<String, String> map2 = new HashMap<>();
            map2.put("A", "xxx");
            Map<String, String> map3 = new HashMap<>();
            map3.put("B", "123");
            map3.put("C", "asd");
            Map[] arr = new Map[3];
            arr[0] = map;
            arr[1] = map2;
            arr[2] = map3;
    
            System.out.println(Arrays.toString(arr));
            store(arr);
            load("k1=v1");
        }
    
        /**
         * 保存
         * @param arr
         * @return
         */
        public String store(Map[] arr) {
            if (arr == null || arr.length < 0) return "";
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < arr.length; i++) {
                Map<String, String> map = arr[i];
    
                String temp = "";
                for (String key : map.keySet()) {
                    stringBuilder.append(temp);
                    String value = map.get(key);
                    stringBuilder.append(key).append("=").append(value);
                    temp = ";";
                }
                if (i != arr.length - 1) {
                    stringBuilder.append("\\n");
                }
            }
            System.out.println(stringBuilder);
            return stringBuilder.toString();
        }
    
    
        /**
         * 读取
         * @param string
         * @return
         */
        public Map[] load(String string) {
            if (TextUtils.isEmpty(string)) return null;
            String[] split = string.split("\\\\n");
            Map[] arr = new Map[split.length];
    
            for (int i = 0; i < split.length; i++) {
                String s1 = split[i];
                String[] split2 = s1.split(";");
                Map<String, String> map = new HashMap<>();
    
                for (String s3 : split2) {
                    String[] split3 = s3.split("=");
                    map.put(split3[0], split3[1]);
                }
                arr[i] = map;
            }
            System.out.println(Arrays.toString(arr));
            return arr;
        }
    

    相关文章

      网友评论

          本文标题:字典序列化

          本文链接:https://www.haomeiwen.com/subject/kvvapctx.html