接口返回由分隔符拼接的 String 转 Map

1,305 阅读1分钟

reponse返回string字符串转Map()

String result = "Status=REGISTER&ProcessDate=20201201111113&JobCd=REGISTER&AccessID=ba813e2f1111111111f8f2222222ee3f228&AccessPass=1f111111298a986a812222222b41&SiteID=&MemberID=&ClientField1=&ClientField2=&ClientField3=&PayType=33&AuPayMethod=01&AuAcceptCode=T203311133123987&ProcessLastDate=20201201182933";
// 返回内容转 Map
Map<String, String> resultMap = new HashMap<>();

// .split(regex) regex为划分kv的分隔符,汇付支付返回分隔符"\r\n"
// .filter() 按照是否包含"=" 判断分隔后数组中对应元素 是否为键值对格式,过滤非键值对字段
// .map() 键值对中元素按照"="分隔为数组  string.split("regex", -1)解释见下
Arrays.stream(result.split("&"))
        .filter(kv -> kv.contains("="))
        .map(kv -> kv.split("=",-1))
        .forEach(array -> resultMap.put(array[0], array[1]));

涉及点

String.class 中方法 .split(@NotNull String regex, int limit)

一、当limit>0时,limit代表最后的数组长度,同时一共会切割limit-1次,最后没有切割完成的直接放在一起

二、当limit=0时,会尽量多去匹配,并且会把末尾的空(例如:用逗号分隔后面“zhaolei,” 最后就会出现空)去掉

三、当limit<0时,会尽量多去匹配,但不会去掉末尾的空(指代"")