原来博客地址http://blog.csdn.net/qq7342272/article/details/6830907

使用原作者贴的代码不是很好用,不能正常运行,所以我稍微改进了一下,特来分享给大家。

private static final String SEP1 = "#";
private static final String SEP2 = "|";
private static final String SEP3 = "=";
/**
* List转换String
*
* @param list
* :需要转换的List
* @return String转换后的字符串
*/
public static String ListToString(List<?> list) {
StringBuffer sb = new StringBuffer();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == null || list.get(i) == "") {
continue;
}
// 如果值是list类型则调用自己
if (list.get(i) instanceof List) {
sb.append(ListToString((List<?>) list.get(i)));
sb.append(SEP1);
} else if (list.get(i) instanceof Map) {
sb.append(MapToString((Map<?, ?>) list.get(i)));
sb.append(SEP1);
} else {
sb.append(list.get(i));
sb.append(SEP1);
}
}
}
return "L" + sb.toString();
} /**
* Map转换String
*
* @param map
* :需要转换的Map
* @return String转换后的字符串
*/
public static String MapToString(Map<?, ?> map) {
StringBuffer sb = new StringBuffer();
// 遍历map
for (Object obj : map.keySet()) {
if (obj == null) {
continue;
}
Object key = obj;
Object value = map.get(key);
if (value instanceof List<?>) {
sb.append(key.toString() + SEP1 + ListToString((List<?>) value));
sb.append(SEP2);
} else if (value instanceof Map<?, ?>) {
sb.append(key.toString() + SEP1
+ MapToString((Map<?, ?>) value));
sb.append(SEP2);
} else {
sb.append(key.toString() + SEP3 + value.toString());
sb.append(SEP2);
}
}
return "M" + sb.toString();
} /**
* String转换Map
*
* @param mapText
* :需要转换的字符串
* @param KeySeparator
* :字符串中的分隔符每一个key与value中的分割
* @param ElementSeparator
* :字符串中每个元素的分割
* @return Map<?,?>
*/
public static Map<String, Object> StringToMap(String mapText) { if (mapText == null || mapText.equals("")) {
return null;
}
mapText = mapText.substring(1); mapText = mapText; Map<String, Object> map = new HashMap<String, Object>();
String[] text = mapText.split("\\" + SEP2); // 转换为数组
for (String str : text) {
String[] keyText = str.split(SEP3); // 转换key与value的数组
if (keyText.length < 1) {
continue;
}
String key = keyText[0]; // key
String value = keyText[1]; // value
if (value.charAt(0) == 'M') {
Map<?, ?> map1 = StringToMap(value);
map.put(key, map1);
} else if (value.charAt(0) == 'L') {
List<?> list = StringToList(value);
map.put(key, list);
} else {
map.put(key, value);
}
}
return map;
} /**
* String转换List
*
* @param listText
* :需要转换的文本
* @return List<?>
*/
public static List<Object> StringToList(String listText) {
if (listText == null || listText.equals("")) {
return null;
}
listText = listText.substring(1); listText = listText; List<Object> list = new ArrayList<Object>();
String[] text = listText.split(SEP1);
for (String str : text) {
if (str.charAt(0) == 'M') {
Map<?, ?> map = StringToMap(str);
list.add(map);
} else if (str.charAt(0) == 'L') {
List<?> lists = StringToList(str);
list.add(lists);
} else {
list.add(str);
}
}
return list;
}

使用方法

String model = ListToString("要转换的List");
接收返回的List = StringToList("原来转换后的String")

最新文章

  1. luogu p2330[SCOI05] 繁忙的都市——瓶颈生成树
  2. Linux 学习笔记(一) 入门
  3. [leetcode]_Valid Parentheses
  4. Ubuntu字体设置
  5. 【随记】还原SQL Server数据库步骤
  6. SQL*Net message from client
  7. OpenReports操作指南
  8. Kill 锁,1222:已超过了锁请求超时时段,
  9. 将warning设为错误
  10. leetcode Merge Two Sorted Lists python
  11. 跨域访问解决方案:JSONP
  12. Caused by: java.sql.SQLException: Field &#39;id&#39; doesn&#39;t have a default value
  13. 距离不是一个连续的物理量(Distance is not a continuous physical quantity)
  14. [ONTAK2015]OR-XOR
  15. BZOJ2215[Poi2011]Conspiracy——2-SAT+tarjan缩点
  16. 第15月第6天 ios UIScrollView不能响应TouchesBegin
  17. linux 查看磁盘读写:iostat
  18. 以 BZOJ 2002 为例学习有根树LCT(Link-Cut Tree)
  19. git学习(三):git暂存区
  20. 双态运维分享之:业务场景驱动的服务型CMDB

热门文章

  1. ES6数组新增的几个方法
  2. 索引法则--IS NULL, IS NOT NULL 也无法使用索引
  3. Elasticsearch 学习(二):安装和使用
  4. Mysql 获取表的comment 字段
  5. Printer for Me
  6. 使用CSS让多出来的字变为省略号
  7. Web网页树形列表中实现选中父节点则子节点全选和不选中父则子全不选
  8. dephi FillChar 的几种写法
  9. vmware 12中安装MAC OS X Lion 10.7
  10. JavaScript for 循环