1。若当前字符串非数字字符或为数字字符0,则复制改字符串于新字符串中
2。若已知字符串的当前字符串是一个数字字符,且它之后没有后继字符,则简单的将它复制倒新字符串中。
3。若已知字符串的当前字符是一个大于0的数字字符,并且还有后继字符,设该数字字符的面值为N,则将
它的后继字符(包括后继字符是一个数字字符)重复复制N+1次到新字符串中。
4。以上述一次变换为一组,在不同组之间另插一个下划线‘—’用于分隔;
5。若已知字符串中包含有下划线‘—’,则变换为用‘\UL’.
例如:encode()函数对字符串24ab_2t2 的变换结果为
444_aaaaa_a_b_\UL_ttt_t_2.
uncode()则实现反转换
实现如下:
public class helper {
StringBuffer sb1=null;
public String decode_ext(String s,boolean b)
{
sb1=new StringBuffer();
if(b)
decode_ext(sb1,s,0,s.length());
else
uncode_ext(sb1,s);
System.out.println(sb1.toString());
return sb1.toString();
}
public void uncode_ext(StringBuffer sb,String s)
{
if(s.length()==0)return;
if(s.charAt(0)!='_'){
if(s.length()>2&&s.substring(0, 0+3).equals("\\UL")){ sb.append("_");s.substring(3);}
else if(s.indexOf("_")>1) sb.append(s.indexOf("_")-1);
else sb.append(s.charAt(0));
uncode_ext(sb,s=s.indexOf("_")>0?s.substring(s.indexOf("_")+1):"");
}
}
public void decode_ext(StringBuffer sb,String s,int i,int count)
{
if(i>=count){ sb1.delete(sb1.length()-1, sb1.length()); return;}
if(s.charAt(0)=='_')sb.append("\\UL");
else if(Character.isDigit(s.charAt(0)) && s.charAt(0)!='0' && s.length()>1 && s.charAt(1)!='_')
for(int n=0;n<Integer.parseInt(String.valueOf(s.charAt(0)))+1;n++)
sb.append(s.charAt(1));
else
sb.append(s.charAt(0));
decode_ext(sb.append("_"),s=s.substring(1),++i,count);
}
}