2011年6月13日月曜日

JAVA ListやMapや配列をStringへ変換(ログ表示用)

システム作っていると、Debug用のLogにListの内容や、Mapの内容を整形して出力したいときがでてくるんだよね。 そんなときに使えるよ。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class StringUtils {
 @SuppressWarnings("unchecked")
 public static void main(String[] args) {
  List l = new ArrayList();
  for (int i = 0; i < 100; i++) {
   l.add(Integer.toString(i));
  }
  System.out.println(StringUtils.object2String(l, ""));
  System.out.println("----------");
  Map m = new HashMap();
  for (int i = 0; i < 10; i++) {
   Map map = new HashMap();
   for (int j = 0; j < 10; j++) {
    map.put("key" + j, "val" + j);
   }
   l.add(map);
   m.put(i, map);
  }
  System.out.println(StringUtils.object2String(m, ""));
  System.out.println("----------");
  System.out.println(StringUtils.object2String(l, ""));
  System.out.println("----------");
  for (int i = 0; i < 2; i++) {
   List l2 = new ArrayList(l);
   l.add(l2);
  }

  Map map = new HashMap();
  for (int i = 0; i < 10; i++) {
   List l3 = new ArrayList();
   for (int j = 0; j < 10; j++) {
    l3.add(""+ i + "" + j);
   }
   map.put("key" + i, l3);
  }
  l.add(map);
  System.out.println(StringUtils.object2String(l, ""));
  System.out.println("----------");
  l.add(new String[]{"arr1", "arr2", "arr3", "arr4", "arr5", "arr6", "arr7", "arr8", "arr9", "arr0"});
  System.out.println(StringUtils.object2String(l, ""));
 }
 
 
 
 
 public static final String LINE_SEPARATOR = System.getProperty("line.separator");
 public static final String INDENT = "  ";
 public static final String BLANK = " ";
 public static final String COLON = ":";
 public static final String LEFT_CURLY_BRACKET = "{";
 public static final String RIGHT_CURLY_BRACKET = "}";
 public static final String LEFT_SQUARE_BRACKET = "{";
 public static final String RIGHT_SQUARE_BRACKET = "}";
 
 @SuppressWarnings("unchecked")
 public static String object2String(Object obj, String indent) {
  StringBuilder sb = new StringBuilder();
  sb.append(obj.getClass().getCanonicalName());
  sb.append(StringUtils.BLANK);
  sb.append(StringUtils.LEFT_CURLY_BRACKET);
  sb.append(StringUtils.LINE_SEPARATOR);
  if (Iterable.class.isAssignableFrom(obj.getClass())) {
   sb.append(StringUtils.iterator2String((Iterable) obj, indent + StringUtils.INDENT));
  } else if (Map.class.isAssignableFrom(obj.getClass())) {
   sb.append(StringUtils.map2String((Map) obj, indent + StringUtils.INDENT));
  } else if (obj instanceof Object[]) {
   sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT));
  } else {
   sb.append(obj);
  }
  sb.append(indent);
  sb.append(StringUtils.RIGHT_CURLY_BRACKET);
  sb.append(StringUtils.LINE_SEPARATOR);
  return sb.toString();
 }

 @SuppressWarnings("unchecked")
 public static String iterator2String(Iterable it, String indent) {
  StringBuilder sb = new StringBuilder();
  int index = 0;
  for (Object obj : it) {
   sb.append(indent);
   sb.append(StringUtils.LEFT_SQUARE_BRACKET);
   sb.append(StringUtils.BLANK);
   sb.append(index);
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.RIGHT_SQUARE_BRACKET);
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.COLON);
   sb.append(StringUtils.BLANK);
   if (Iterable.class.isAssignableFrom(obj.getClass())) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.iterator2String((Iterable) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (Map.class.isAssignableFrom(obj.getClass())) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.map2String((Map) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (obj instanceof Object[]) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else {
    sb.append(obj);
   }
   index++;
   sb.append(StringUtils.LINE_SEPARATOR);
  }
  return sb.toString();
 }

 @SuppressWarnings("unchecked")
 public static String map2String(Map map, String indent) {
  StringBuilder sb = new StringBuilder();
  for (Object obj : map.entrySet()) {
   Entry e = (Entry) obj;
   Object val = e.getValue();
   sb.append(indent);
   sb.append(e.getKey());
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.COLON);
   sb.append(StringUtils.BLANK);
   if (Iterable.class.isAssignableFrom(val.getClass())) {
    sb.append(val.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.iterator2String((Iterable) val, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (Map.class.isAssignableFrom(val.getClass())) {
    sb.append(val.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(map2String((Map) val, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (obj instanceof Object[]) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else {
    sb.append(val);
   }
   sb.append(StringUtils.LINE_SEPARATOR);
  }
  return sb.toString();
 }
 
 @SuppressWarnings("unchecked")
 public static String array2String(Object[] arr, String indent) {
  StringBuilder sb = new StringBuilder();
  int index = 0;
  for (Object obj : arr) {
   sb.append(indent);
   sb.append(StringUtils.LEFT_SQUARE_BRACKET);
   sb.append(StringUtils.BLANK);
   sb.append(index);
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.RIGHT_SQUARE_BRACKET);
   sb.append(StringUtils.BLANK);
   sb.append(StringUtils.COLON);
   sb.append(StringUtils.BLANK);
   if (Iterable.class.isAssignableFrom(obj.getClass())) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.iterator2String((Iterable) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (Map.class.isAssignableFrom(obj.getClass())) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.map2String((Map) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else if (obj instanceof Object[]) {
    sb.append(obj.getClass().getCanonicalName());
    sb.append(StringUtils.BLANK);
    sb.append(StringUtils.LEFT_CURLY_BRACKET);
    sb.append(StringUtils.LINE_SEPARATOR);
    sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT));
    sb.append(indent);
    sb.append(StringUtils.RIGHT_CURLY_BRACKET);
   } else {
    sb.append(obj);
   }
   index++;
   sb.append(StringUtils.LINE_SEPARATOR);
  }
  return sb.toString();
 }
}

0 件のコメント:

コメントを投稿