in src/main/java/org/apache/commons/jexl3/parser/StringParser.java [212:268]
public static String escapeString(final String str, final char delim) {
if (str == null) {
return null;
}
final int length = str.length();
final StringBuilder strb = new StringBuilder(length + 2);
strb.append(delim);
for (int i = 0; i < length; ++i) {
final char c = str.charAt(i);
switch (c) {
case 0:
continue;
case '\b':
strb.append('\\');
strb.append('b');
break;
case '\t':
strb.append('\\');
strb.append('t');
break;
case '\n':
strb.append('\\');
strb.append('n');
break;
case '\f':
strb.append('\\');
strb.append('f');
break;
case '\r':
strb.append('\\');
strb.append('r');
break;
case '\\':
strb.append('\\');
strb.append('\\');
break;
default:
if (c == delim) {
strb.append('\\');
strb.append(delim);
} else if (c >= FIRST_ASCII && c <= LAST_ASCII) {
strb.append(c);
} else {
// convert to Unicode escape sequence
strb.append('\\');
strb.append('u');
final String hex = Integer.toHexString(c);
for (int h = hex.length(); h < UCHAR_LEN; ++h) {
strb.append('0');
}
strb.append(hex);
}
}
}
strb.append(delim);
return strb.toString();
}