一道面试题

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);
  
 }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值