我们程序中⽤用到了了⼀一个数组 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;
}
网友评论