字典序列化

2019-10-10  本文已影响0人  galaxy_zheng

我们程序中⽤用到了了⼀一个数组 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;
    }
上一篇 下一篇

猜你喜欢

热点阅读