package util;
public class StringUtil {
private static final String ESCAPE_START = "IDEA-ESCAPE-START";
private static final String ESCAPE_END = "IDEA-ESCAPE-END";
public static String escape(final String str) {
final String escaped = doEscape(str);
return str.equals(escaped) ? str : ESCAPE_START + escaped + ESCAPE_END;
}
private static String doEscape(final String str) {
final StringBuilder buffer = new StringBuilder();
for (int idx = 0; idx < str.length(); idx++) {
char ch = str.charAt(idx);
switch (ch) {
case '\b':
buffer.append("\\b");
break;
case '\t':
buffer.append("\\t");
break;
case '\n':
buffer.append("\\n");
break;
case '\f':
buffer.append("\\f");
break;
case '\r':
buffer.append("\\r");
break;
case '\\':
buffer.append("\\\\");
break;
default:
if (Character.isISOControl(ch)) {
String hexCode = Integer.toHexString(ch).toUpperCase();
buffer.append("\\u");
int paddingCount = 4 - hexCode.length();
while (paddingCount-- > 0) {
buffer.append(0);
}
buffer.append(hexCode);
} else {
buffer.append(ch);
}
}
}
return buffer.toString();
}
}