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>
 
 

JAVA中List转换String,String转换List,Map转换String,String转换Map之间的转换类的更多相关文章

  1. Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换

    public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ publ ...

  2. 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

    声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...

  3. java中创建字符串的两种方式(“”与new String())及区别

    结论:通过""创建的字符串实际上在java堆中只有一个,而通过new string创建出来的字符串在java堆中占有不同的内存. 第一个True表明这两个在内存中拥有相同的地址,那 ...

  4. java中八种基本数据类型以及它们的封装类,String类型的一些理解

    在我们面试或者考试过程中经常会考到八种基本数据类型以及它们的封装类,那么有哪八种基本数据类型呢?它们的封装类又是什么呢? 首先,八种基本数据类型分别是:int.short.float.double.l ...

  5. python中2进制、10进制、16进制等之间的转换

    10转2: bin(8) # '0b1000' 2转10: int( 10转16: hex(15) # '0xf' 16转10: int( 2进制和16进制中间通过转10进制可以相互转换 from b ...

  6. Java中char和String的相互转换

    转自:http://blog.csdn.net/yaokai_assultmaster/article/details/52082763 Java中char是一个基本类型,而String是一个引用类型 ...

  7. Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  8. 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接

    长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...

  9. (转)java 中unsigned类型的转换

    转自:http://blog.sina.com.cn/s/blog_77bf45a90101dld9.html 在Java中,不存在Unsigned无符号数据类型,但可以轻而易举的完成Unsigned ...

  10. Java中short和int的转换

    例子[1]: 第一种情况: short a = 1; a = a + 1; // 这一步会报错 System.out.print(a); 编译器会报错,原因如下: 第二种情况: short a = 1 ...

随机推荐

  1. 【win8技巧】win8一键截图自动保存到文件夹

    以前截图都是按着键盘的PrtSc键,但是这个只是保存到剪贴板,还需要粘贴才行. 现在win8可以直接使用 Win + PrtSc 进行全屏截图,不仅保存到剪贴板,而且自动保存到[库]--[图片]--[ ...

  2. PHP设置COOKIE的HttpOnly属性

    httponly是微软对cookie做的扩展.这个主要是解决用户的cookie可能被盗用的问题. 大家都知道,当我们去邮箱或者论坛登陆后,服务器会写一些cookie到我们的浏览器,当下次再访问其他页面 ...

  3. 网站报错Access denied for user 'root'@'localhost' -问题排查续

    网站报错Access denied for user 'root'@'localhost' (using password: YES) 每次的挽救办法就是: /etc/init.d/mysqld st ...

  4. POJ 2531 Network Saboteur

    http://poj.org/problem?id=2531 题意 :有N台电脑,每两台电脑之间都有个通信量C[i][j]; 问如何将其分成两个子网,能使得子网之间的通信量最大. 也就是说将所有节点分 ...

  5. Android UI性能优化详解

    设计师,开发人员,需求研究和测试都会影响到一个app最后的UI展示,所有人都很乐于去建议app应该怎么去展示UI.UI也是app和用户打交道的部分,直接对用户形成品牌意识,需要仔细的设计.无论你的ap ...

  6. 2、RenderScript的计算(2013.05.07)

    一.官方文档翻译: Android Renderscript计算 参考网址: http://blog.csdn.net/fireofstar/article/details/7748143 http: ...

  7. OpenCV学习笔记:如何扫描图像、利用查找表和计时

    目的 我们将探索以下问题的答案: 如何遍历图像中的每一个像素? OpenCV的矩阵值是如何存储的? 如何测试我们所实现算法的性能? 查找表是什么?为什么要用它? 测试用例 这里我们测试的,是一种简单的 ...

  8. Android 使用 popupWindow实现弹层并操作弹层元素

    需求: 点页面,出现弹层,弹层包含EditText,Button等,点击Button实现提交操作: 最终代码: private PopupWindow popupWindow ; private Ed ...

  9. 分布式缓存系统Memcached简介与实践(.NET memcached client library)

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  10. 让ASP.NET MVC页面返回不同类型的内容

    在ASP.NET MVC的controller中大部分方法返回的都是ActionResult,更确切的是ViewResult.它返回了一个View,一般情况下是一个HTML页面.但是在某些情况下我们可 ...