package util;
public class NamesEncoding {
static char[] e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
static final int SPAC = e.length;
public static String encode(String value) {
char[] vs = value.toCharArray();
char[] nvs = new char[vs.length * 3 + 1];
int posV = 0;
int posNv = 0;
boolean special = false;
for (; posV < vs.length;) {
if (vs[posV] < 0xFF) {
char v = vs[posV++];
if ('0' <= v && v <= '9') {
nvs[posNv++] = 'D';
nvs[posNv++] = v;
special = true;
break;
} else if ('A' <= v && v <= 'Z') {
nvs[posNv++] = v;
break;
} else if ('a' <= v && v <= 'z') {
nvs[posNv++] = (char) (v - 0x20);
break;
} else {
}
} else {
nvs[posNv++] = 'Z';
special = true;
break;
}
}
for (; posV < vs.length; posV++) {
char v = vs[posV];
if (v < 0xFF) {
if (('0' <= v && v <= '9') || ('A' <= v && v <= 'Z')) {
nvs[posNv++] = v;
} else if ('a' <= v && v <= 'z') {
nvs[posNv++] = (char) (v - 0x20);
} else if ('_' == v || '-' == v || '/' == v || ' ' == v) {
nvs[posNv++] = '_';
} else {
}
} else {
int nv = v - 0xFF;
nvs[posNv++] = e[nv % SPAC];
nv /= SPAC;
nvs[posNv++] = e[nv % SPAC];
}
}
if (special) {
nvs[posNv++] = '_';
}
// if (log.isTraceEnabled()) {
// log.trace("\t[" + value + "] > [" + new String(nvs, 0, posNv) + "]");
// }
return new String(nvs, 0, posNv);
}
public static String encode(String value, boolean toUpcase) {
if (toUpcase) {
encode(value);
}
char[] vs = value.toCharArray();
char[] nvs = new char[vs.length * 3 + 1];
int posV = 0;
int posNv = 0;
boolean special = false;
for (; posV < vs.length;) {
if (vs[posV] < 0xFF) {
char v = vs[posV++];
if ('0' <= v && v <= '9') {
nvs[posNv++] = 'D';
nvs[posNv++] = v;
special = true;
break;
} else if ('A' <= v && v <= 'Z') {
nvs[posNv++] = v;
break;
} else if ('a' <= v && v <= 'z') {
nvs[posNv++] = v;
break;
} else {
}
} else {
nvs[posNv++] = 'Z';
special = true;
break;
}
}
for (; posV < vs.length; posV++) {
char v = vs[posV];
if (v < 0xFF) {
if (('0' <= v && v <= '9') || ('A' <= v && v <= 'Z')) {
nvs[posNv++] = v;
} else if ('a' <= v && v <= 'z') {
nvs[posNv++] = v;
} else if ('_' == v || '-' == v || '/' == v || ' ' == v) {
nvs[posNv++] = '_';
} else {
}
} else {
int nv = v - 0xFF;
nvs[posNv++] = e[nv % SPAC];
nv /= SPAC;
nvs[posNv++] = e[nv % SPAC];
}
}
if (special) {
nvs[posNv++] = '_';
}
// if (log.isTraceEnabled()) {
// log.trace("\t[" + value + "] > [" + new String(nvs, 0, posNv) + "]");
// }
return new String(nvs, 0, posNv);
}
}