1. <pre name="code" class="java"></pre><pre name="code" class="java"><pre name="code" class="java">import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;
  5. public class Utils {
  6. /**
  7. * 定义分割常量 (#在集合中的含义是每个元素的分割,|主要用于map类型的集合用于key与value中的分割)
  8. */
  9. private static final String SEP1 = "#";
  10. private static final String SEP2 = "|";
  11. /**
  12. * List转换String
  13. *
  14. * @param list
  15. *            :需要转换的List
  16. * @return String转换后的字符串
  17. */
  18. public static String ListToString(List<?> list) {
  19. StringBuffer sb = new StringBuffer();
  20. if (list != null && list.size() > 0) {
  21. for (int i = 0; i < list.size(); i++) {
  22. if (list.get(i) == null || list.get(i) == "") {
  23. continue;
  24. }
  25. // 如果值是list类型则调用自己
  26. if (list.get(i) instanceof List) {
  27. sb.append(ListToString((List<?>) list.get(i)));
  28. sb.append(SEP1);
  29. } else if (list.get(i) instanceof Map) {
  30. sb.append(MapToString((Map<?, ?>) list.get(i)));
  31. sb.append(SEP1);
  32. } else {
  33. sb.append(list.get(i));
  34. sb.append(SEP1);
  35. }
  36. }
  37. }
  38. return "L" + EspUtils.EncodeBase64(sb.toString());
  39. }
  40. /**
  41. * Map转换String
  42. *
  43. * @param map
  44. *            :需要转换的Map
  45. * @return String转换后的字符串
  46. */
  47. public static String MapToString(Map<?, ?> map) {
  48. StringBuffer sb = new StringBuffer();
  49. // 遍历map
  50. for (Object obj : map.keySet()) {
  51. if (obj == null) {
  52. continue;
  53. }
  54. Object key = obj;
  55. Object value = map.get(key);
  56. if (value instanceof List<?>) {
  57. sb.append(key.toString() + SEP1 + ListToString((List<?>) value));
  58. sb.append(SEP2);
  59. } else if (value instanceof Map<?, ?>) {
  60. sb.append(key.toString() + SEP1
  61. + MapToString((Map<?, ?>) value));
  62. sb.append(SEP2);
  63. } else {
  64. sb.append(key.toString() + SEP1 + value.toString());
  65. sb.append(SEP2);
  66. }
  67. }
  68. return "M" + EspUtils.EncodeBase64(sb.toString());
  69. }
  70. /**
  71. * String转换Map
  72. *
  73. * @param mapText
  74. *            :需要转换的字符串
  75. * @param KeySeparator
  76. *            :字符串中的分隔符每一个key与value中的分割
  77. * @param ElementSeparator
  78. *            :字符串中每个元素的分割
  79. * @return Map<?,?>
  80. */
  81. public static Map<String, Object> StringToMap(String mapText) {
  82. if (mapText == null || mapText.equals("")) {
  83. return null;
  84. }
  85. mapText = mapText.substring(1);
  86. mapText = EspUtils.DecodeBase64(mapText);
  87. Map<String, Object> map = new HashMap<String, Object>();
  88. String[] text = mapText.split("\\" + SEP2); // 转换为数组
  89. for (String str : text) {
  90. String[] keyText = str.split(SEP1); // 转换key与value的数组
  91. if (keyText.length < 1) {
  92. continue;
  93. }
  94. String key = keyText[0]; // key
  95. String value = keyText[1]; // value
  96. if (value.charAt(0) == 'M') {
  97. Map<?, ?> map1 = StringToMap(value);
  98. map.put(key, map1);
  99. } else if (value.charAt(0) == 'L') {
  100. List<?> list = StringToList(value);
  101. map.put(key, list);
  102. } else {
  103. map.put(key, value);
  104. }
  105. }
  106. return map;
  107. }
  108. /**
  109. * String转换List
  110. *
  111. * @param listText
  112. *            :需要转换的文本
  113. * @return List<?>
  114. */
  115. public static List<Object> StringToList(String listText) {
  116. if (listText == null || listText.equals("")) {
  117. return null;
  118. }
  119. listText = listText.substring(1);
  120. listText = EspUtils.DecodeBase64(listText);
  121. List<Object> list = new ArrayList<Object>();
  122. String[] text = listText.split(SEP1);
  123. for (String str : text) {
  124. if (str.charAt(0) == 'M') {
  125. Map<?, ?> map = StringToMap(str);
  126. list.add(map);
  127. } else if (str.charAt(0) == 'L') {
  128. List<?> lists = StringToList(str);
  129. list.add(lists);
  130. } else {
  131. list.add(str);
  132. }
  133. }
  134. return list;
  135. }
  136. }
  137. </pre><br>
  138. <pre></pre>
  139. 最终版本
  140. <pre></pre>
  141. <pre name="code" class="java">运行结果:<img src="http://hi.csdn.net/attachment/201109/29/0_1317259591S9xc.gif" alt=""></pre>
  142. <pre></pre>
  143. </pre>
 
 

最新文章

  1. 数据库备份Sql
  2. AngularJS学习---更多模板(More Templating) step 8
  3. css3学习总结2--CSS3圆角边框
  4. 我的android学习经历18
  5. Oracle学习笔记1:win7 x64下安装Oracle10g
  6. asp.net获取文件夹下的所有文件
  7. iOS 并发概念浅析
  8. HDU3367+并查集应用
  9. GPIO模拟串口注意是事项
  10. iOS runtime的应用实例
  11. Linux基础(七)
  12. Angular学习笔记(一)
  13. 使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项
  14. Java中用正则表达式判断日期格式是否正确
  15. Spring Security入门(2-2)Spring Security 的运行原理 2
  16. Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现以及ListView的优化
  17. windows下安装MongoDB扩展和配置
  18. 真的无语, 今天遇到一个奇葩的事情: http 会话劫持
  19. P2472 [SCOI2007]蜥蜴(网络流)
  20. Effective C++(第三版)笔记 ---- 第一部分让自己习惯C++

热门文章

  1. BZOJ 3713: [PA2014]Iloczyn
  2. HDU 1025 Constructing Roads In JGShining&#39;s Kingdom(DP+二分)
  3. loadrunner http协议put模式脚本编写
  4. 通过navicat连接mysql服务器提示SQL Error (1130): Host &#39;192.168.1.100&#39; is not allowed to connect to this MySQL server
  5. Linux中与DNS相关的内容
  6. table 表头固定
  7. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-005-定义切面使用@Aspect、@EnableAspectJAutoProxy、&lt;aop:aspectj-autoproxy&gt;
  8. ANDROID_MARS学习笔记_S01原始版_018_SERVICE之Parcel
  9. Layout Resource官方教程(3)在layout中用include嵌入其它layout
  10. 以编程方式使用 Word 中的内置对话框