package com.mysema.rdfbean.model.io; import java.util.Locale; /** * @author tiwe * */ final class NTriplesUtil { public static String escapeString(String label) { int labelLength = label.length(); StringBuilder sb = new StringBuilder(2 * labelLength); for (int i = 0; i < labelLength; i++) { char c = label.charAt(i); int cInt = c; if (c == '\\') { sb.append("\\\\"); } else if (c == '"') { sb.append("\\\""); } else if (c == '\n') { sb.append("\\n"); } else if (c == '\r') { sb.append("\\r"); } else if (c == '\t') { sb.append("\\t"); } else if (cInt >= 0x0 && cInt <= 0x8 || cInt == 0xB || cInt == 0xC || cInt >= 0xE && cInt <= 0x1F || cInt >= 0x7F && cInt <= 0xFFFF) { sb.append("\\u"); sb.append(toHexString(cInt, 4)); } else if (cInt >= 0x10000 && cInt <= 0x10FFFF) { sb.append("\\U"); sb.append(toHexString(cInt, 8)); } else { sb.append(c); } } return sb.toString(); } private static String toHexString(int decimal, int stringLength) { StringBuilder sb = new StringBuilder(stringLength); String hexVal = Integer.toHexString(decimal).toUpperCase(Locale.ENGLISH); // insert zeros if hexVal has less than stringLength characters: int nofZeros = stringLength - hexVal.length(); for (int i = 0; i < nofZeros; i++) { sb.append('0'); } sb.append(hexVal); return sb.toString(); } private NTriplesUtil() { } }