Java中List轉換String,String轉換List,Map轉換String,Stri...

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Utils {


    /**
     * 定義分割常量 (#在集合中的含義是每一個元素的分割,|主要用於map類型的集合用於key與value中的分割)
     */
    private static final String SEP1 = "#";
    private static final String SEP2 = "|";


    /**
     * 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" + encodeBase64(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() + SEP1 + value.toString());
                sb.append(SEP2);
            }
        }
        return "M" + encodeBase64(sb.toString());
    }


    /**
     * String轉換Map
     *
     * @param mapText          :須要轉換的字符串
     * @return Map<?,?>
     */
    public static Map<String, Object> StringToMap(String mapText) {


        if (mapText == null || mapText.equals("")) {
            return null;
        }
        mapText = mapText.substring(1);


        mapText = decodeBase64(mapText);


        Map<String, Object> map = new HashMap<String, Object>();
        String[] text = mapText.split("\\" + SEP2); // 轉換爲數組
        for (String str : text) {
            String[] keyText = str.split(SEP1); // 轉換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 = decodeBase64(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;
    }


    /**
     * 編碼
     * @param str
     * @return String
     */
    public static String encodeBase64(String str){
        if (str == null || str.isEmpty()) {
            return str;
        }
        return new sun.misc.BASE64Encoder().encode(str.getBytes());
    }


    /**
     * 解碼
     * @param str
     * @return      */     public static String decodeBase64(String str) {         byte[] bt = null;         try {             sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();             bt = decoder.decodeBuffer( str );         } catch (IOException e) {             e.printStackTrace();         } finally {             if (bt != null) {                 return new String(bt);             } else {                 return null;             }         }     } }
相關文章
相關標籤/搜索