class Main {
public static final String HEX_DIGITS = "0123456789ABCDEF";
public static char decodeUTF8(String src) {
if (src == null) {
throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
}
if (!(src.startsWith("\\u") && src.length() <= 6)) {
throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
}
char[] sources = src.substring(2).toCharArray();
char res = 0;
for (char nextChar : sources) {
int digit = HEX_DIGITS.indexOf(Character.toUpperCase(nextChar));
res = (char) (res * 16 + digit);
}
return res;
}
public static String decodeUTF8String(String src) {
StringBuilder sb = new StringBuilder();
char[] sources = src.toCharArray();
for (int i = 0; i < sources.length; i++) {
if (sources[i] == '\\' && i < sources.length - 5
&& sources[i + 1] == 'u') {
String utf8 = "" + sources[i++] + sources[i++] + sources[i++]
+ sources[i++] + sources[i++] + sources[i];
sb.append(decodeUTF8(utf8));
i = i + 5;
} else {
sb.append(sources[i]);
}
}
return sb.toString();
}
}