package jadx.core.utils;
import jadx.api.IJadxArgs;
public class StringUtils {
private final boolean escapeUnicode;
public StringUtils(IJadxArgs args) {
this.escapeUnicode = args.escapeUnicode();
}
public String unescapeString(String str) {
int len = str.length();
if (len == 0) {
return "\"\"";
}
StringBuilder res = new StringBuilder();
for (int i = 0; i < len; i++) {
int c = str.charAt(i) & 0xFFFF;
processChar(c, res);
}
return '"' + res.toString() + '"';
}
public String unescapeChar(char ch) {
if (ch == '\'') {
return "'\\\''";
}
StringBuilder res = new StringBuilder();
processChar(ch, res);
return '\'' + res.toString() + '\'';
}
private void processChar(int c, StringBuilder res) {
switch (c) {
case '\n': res.append("\\n"); break;
case '\r': res.append("\\r"); break;
case '\t': res.append("\\t"); break;
case '\b': res.append("\\b"); break;
case '\f': res.append("\\f"); break;
case '\'': res.append('\''); break;
case '"': res.append("\\\""); break;
case '\\': res.append("\\\\"); break;
default:
if (c < 32 || c >= 127 && escapeUnicode) {
res.append("\\u").append(String.format("%04x", c));
} else {
res.append((char) c);
}
break;
}
}
public static String escape(String str) {
int len = str.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
switch (c) {
case '.':
case '/':
case ';':
case '$':
case ' ':
case ',':
case '<':
sb.append('_');
break;
case '[':
sb.append('A');
break;
case ']':
case '>':
case '?':
case '*':
break;
default:
sb.append(c);
break;
}
}
return sb.toString();
}
public static String escapeXML(String str) {
int len = str.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
switch (c) {
case '&': sb.append("&"); break;
case '<': sb.append("<"); break;
case '>': sb.append(">"); break;
case '"': sb.append("""); break;
case '\'': sb.append("'"); break;
default:
sb.append(c);
break;
}
}
return sb.toString();
}
public static String escapeResValue(String str) {
int len = str.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
switch (c) {
case '&': sb.append("&"); break;
case '<': sb.append("<"); break;
case '>': sb.append(">"); break;
case '"': sb.append("""); break;
case '\'': sb.append("'"); break;
case '\n': sb.append("\\n"); break;
case '\r': sb.append("\\r"); break;
case '\t': sb.append("\\t"); break;
case '\b': sb.append("\\b"); break;
case '\f': sb.append("\\f"); break;
default:
sb.append(c);
break;
}
}
return sb.toString();
}
public static String escapeResStrValue(String str) {
int len = str.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
switch (c) {
case '&': sb.append("&"); break;
case '<': sb.append("<"); break;
case '>': sb.append(">"); break;
case '"': sb.append("\\\""); break;
case '\'': sb.append("\\'"); break;
case '\n': sb.append("\\n"); break;
case '\r': sb.append("\\r"); break;
case '\t': sb.append("\\t"); break;
case '\b': sb.append("\\b"); break;
case '\f': sb.append("\\f"); break;
default:
sb.append(c);
break;
}
}
return sb.toString();
}
}