1,若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中。
2,若已知字符串的当前字符是一数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中。
3,若已知字符串的当前字符是一个大于0的数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括数字字符)重复复制n+1次到新字符串中。
4,以上一次变换为一组,在不同组之间插入一个下划线‘_’用于分隔。
5,若已知字符串中包括有下划线‘_’,则变换为用“/UL”。
用encode()和decode()两个函数实现分别实现对字符串变换和复原
例如 encode()对字符串24ab_2t2的变换结果为444_aaaaa_a_b_/UL_ttt_t_2
复原函数decode()做变换函数encode()的相反工作,按照上述规则逆运算,变回原来的字符串。滤掉!多余的下划线字符。
public static String encode(String str) {
StringBuffer buff = new StringBuffer();
char[] arr = str.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (i != 0)
buff.append("_");
if (arr[i] > 48 && arr[i] <= 57) {
if (i < arr.length - 1) {
for (int j = 0; j <= Integer.parseInt(String
.valueOf(arr[i])); j++) {
buff.append(arr[i + 1]);
}
} else {
buff.append(arr[i]);
}
} else {
if (arr[i] == 95) {
buff.append("/UL");
} else {
buff.append(arr[i]);
}
}
}
return buff.toString();
}
public static String decode(String str) {
StringBuffer buff = new StringBuffer();
String[] arr = str.split("_");
int spaceCnt = 0;
for (int i = 0; i < arr.length; i++) {
if ("".equals(arr[i])) {
spaceCnt++;
} else {
buff.append(spaceCnt > 1 ? spaceCnt - 1 : "");
spaceCnt = 0;
if ("/UL".equals(arr[i])) {
buff.append("_");
} else if (arr[i].length() > 1) {
buff.append(arr[i].length() - 1);
} else {
buff.append(arr[i]);
}
}
}
return buff.toString();
}
自己拿去测试吧,我写完只是简单测了下!
StringBuffer buff = new StringBuffer();
char[] arr = str.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (i != 0)
buff.append("_");
if (arr[i] > 48 && arr[i] <= 57) {
if (i < arr.length - 1) {
for (int j = 0; j <= Integer.parseInt(String
.valueOf(arr[i])); j++) {
buff.append(arr[i + 1]);
}
} else {
buff.append(arr[i]);
}
} else {
if (arr[i] == 95) {
buff.append("/UL");
} else {
buff.append(arr[i]);
}
}
}
return buff.toString();
}
public static String decode(String str) {
StringBuffer buff = new StringBuffer();
String[] arr = str.split("_");
int spaceCnt = 0;
for (int i = 0; i < arr.length; i++) {
if ("".equals(arr[i])) {
spaceCnt++;
} else {
buff.append(spaceCnt > 1 ? spaceCnt - 1 : "");
spaceCnt = 0;
if ("/UL".equals(arr[i])) {
buff.append("_");
} else if (arr[i].length() > 1) {
buff.append(arr[i].length() - 1);
} else {
buff.append(arr[i]);
}
}
}
return buff.toString();
}
自己拿去测试吧,我写完只是简单测了下!
温馨提示:答案为网友推荐,仅供参考