package com.googlecode.totallylazy.json; import com.googlecode.totallylazy.functions.Function1; import static com.googlecode.totallylazy.Sequences.characters; import static java.lang.Integer.parseInt; import static java.lang.String.format; public class Strings { public static String toString(CharSequence value) { return quote(escape(value)); } public static String escape(CharSequence value) { return characters(value).map(functions.escape).toString(""); } public static String escape(Character character) { switch (character) { case '"': return "\\\""; case '\\': return "\\\\"; case '\b': return "\\b"; case '\n': return "\\n"; case '\r': return "\\r"; case '\t': return "\\t"; default: return character.toString(); } } public static String quote(CharSequence value) { return format("\"%s\"", value); } public static String unescape(CharSequence escaped) { switch (escaped.charAt(0)) { case '"': return "\""; case '\\': return "\\"; case '/': return "/"; case 'b': return "\b"; case 'n': return "\n"; case 'r': return "\r"; case 't': return "\t"; case 'f': return "\f"; case 'u': return Character.toString((char) parseInt(escaped.subSequence(1, escaped.length()).toString(), 16)); default: throw new UnsupportedOperationException(); } } public static class functions { public static Function1<Character, String> escape = Strings::escape; public static Function1<String, String> unescape = Strings::unescape; } }