package com.anuragkapur.misc; import java.util.ArrayList; import java.util.List; /** * @author anuragkapur */ public class StringSerializer { private final char DEMARKER = '.'; public String serialize(List<String> strings) { StringBuilder builder = new StringBuilder(); for (String str : strings) { builder.append(str); builder.append(DEMARKER); builder.append(str.length()); } return builder.toString(); } public List<String> deserialize(String serializedString, List<String> strings) { char serializedChars[] = serializedString.toCharArray(); int lengthOfLastStringInList = 0; int posOfLastDemarker = 0; for (int i=serializedChars.length-1; i>=0; i--) { if (serializedChars[i] == '.') { posOfLastDemarker = i; lengthOfLastStringInList = Integer.parseInt(serializedString.substring(i+1, serializedChars.length)); break; } } StringBuilder builder = new StringBuilder(); for (int i=posOfLastDemarker-lengthOfLastStringInList; i<posOfLastDemarker; i++) { builder.append(serializedChars[i]); } if (strings == null) { strings = new ArrayList<>(); } strings.add(builder.toString()); if (posOfLastDemarker-lengthOfLastStringInList > 0) { String leftoverString = serializedString.substring(0, posOfLastDemarker-lengthOfLastStringInList); return deserialize(leftoverString, strings); } else { return strings; } } }