package encode;public class TestEncodeAndDecode {/*** 用java语言实现两个函数encode()和decode(),分别实现对字符串的变换和复原。* 变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:** (1)若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中。* (2)若已知字符串的当前字符是一个数字字符,且它之后没有后续字符,则简单地将他复制到新字符串中。* (3)若已知字符串的当前字符是一个大于0的数字字符,并且还有后续字符,设该数字字符的面值为n,则将它的后续字符(包括* 后续字符是一个数字字符)重复复制n+1次到新字符串中。* (4)若已知字符串的当前字符是下划线‘_’,则将当前字符串变换为用‘\UL’。* (5)以上述一次变换为一组,在不同组之间另插入一个下划线‘_’用于分隔。** 例如:encode()函数对字符串24ab_2t2的变换结果为444_aaaaa_a_b_\UL_ttt_t_2** 复原函数decode()做变换函数encode()的相反的工作,按照上述规则逆运算,变回原来的字符串。滤掉多余的下划线字符。** 要求:代码可读性要好,逻辑要清。* @author Administrator**/public static void main(String[] args) {String testChar="24ab_2t2";// encode(testChar);System.out.println(encode(testChar));System.out.println(decode(encode(testChar)));}public  static String encode(String s){if(s==null){throw new StringLenException("字符串末初始化!");}if(s.length()<0){throw new StringLenException("字符串不能为空!");}StringBuffer sb = new StringBuffer();char c=0;int k =0;int n = s.length();for(int i=0;i<n;i++){c=s.charAt(i);//对字符进行处理://若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中//是数字,且不是最后一位,//获取当前的面值c,将后面一位进行你c+1次赋值if(c>='1' &&c<='9'&& i!=n-1){k=c-'0'+1;for(int m=0;m<k;m++){sb.append( s.charAt(i+1)) ;}}else if(c=='_'){sb.append("\\UL");}else{sb.append(c);}sb.append("_");}return sb.deleteCharAt(sb.length()-1).toString();}/** 1:先用“——”分割,如果只有一个(则可定只有一个字符,直接赋值),*  1.1如果有两个,(循环判断,每一个的长度等于一时,直接赋值,如果是“——”,转换成“\\UL,不然就是字符的个数减一的值”)*/public static String decode(String str){StringBuffer sb = new StringBuffer();if(str==null){throw new StringLenException("字符串末初始化!");}if(str.length()<0){throw new StringLenException("字符串不能为空!");}String[] strArray= str.split("_");int n =strArray.length;if(n==1){sb.append(str);}else{for(int i = 0 ;i<n;i++){int length = strArray[i].length();char c =  strArray[i].charAt(0);if(length==1){sb.append(c);}else{if( strArray[i].equals("\\UL")){sb.append("_");}else {sb.append(strArray[i].length()-1)   ;//sb.append(strArray[i].charAt(0));}}}}return sb.toString();}}

对encode 和decode 规则的测试相关推荐

  1. pythonencode_python的encode和decode误读总结

    python的encode和decode误读总结 最近在学Python,对编码有个误解的地方 下面是错误的理解: encode():编码,将对象的编码转换为指定编码格式,按照字面理解,一直以为是其他编 ...

  2. [转]python新手必碰到的问题---encode与decode,中文乱码--转载

    edu.codepub.com/2009/1029/17037.php 这个问题在python3.0里已经解决了. 这有篇很好的文章,可以明白这个问题: 为什么会报错"UnicodeEnco ...

  3. mark python新手必碰到的问题---encode与decode,中文乱码[转]

    转自:http://blog.csdn.net/a921800467b/article/details/8579510 为什么会报错"UnicodeEncodeError:'ascii' c ...

  4. python中encode和decode使用讲解与演示

    1.基本语法 1.encode()和decode()都是字符串的函数 decode解码 encode编码 str ---------> str(Unicode,byte类型) --------- ...

  5. python中encode用法_python3中encode和decode的一些基本用法

    python3中encode和decode跟python2还是有一定的区别的,在python3中: encode(编码):按照某种规则将"文本"转换为"字节流" ...

  6. python 乱码转码_数据库乱码问题 Python 编码问题(Unicode 的 encode、decode 相互转换 )...

    前言: 今天有个项目需要合并(A合并到B),我所做的就是数据库的合并操作,其中出现的主要问题就是乱码的问题.乱码这个问题是很常见的问题,今天整理了下自己所理解的一点见解. 案例: NAME COMPA ...

  7. Url路径处理encode和decode

    Url路径处理encode和decode 1.url路径进行encode 2.url路径进行decode 1.url路径进行encode 1.1浏览器自动encode 当我们用浏览器测试自己开发的ap ...

  8. python3 gb2312转utf8_python2和python3字符编码 unicode,utf-8,gb2312相互转换encode,decode...

    一.预习: 1.Unicode 和utf-8之间的关系 unicode是一种编码标准,具体的实现标准可能是utf-8,utf-16,gbk -- UTF-8是Unicode的实现方式之一 2.pyth ...

  9. 2019年2月26日 Unique Email Addresses、To Lower Case、Encode and Decode TinyURL

    今天开始加快速度,趁着还有空多刷几题,语言换成python提高速度了. 1. Unique Email Addresses 弱题,注意@符号前后的处理方式不同 class Solution(objec ...

最新文章

  1. AngularJS表单验证
  2. 基于Centos7.2搭建Cobbler自动化批量部署操作系统服务
  3. 脊柱外科病人资料管理系统的界面设计分析
  4. 页面排序(上下元素对换)
  5. linux单网卡多拨Adsl,ROS单线多拨pppoe
  6. Apache Hudi 在 B 站构建实时数据湖的实践
  7. CICD联动阿里云容器服务Kubernetes实践之Bamboo篇
  8. Java多线程学习九:如何正确关闭线程池?shutdown 和 shutdownNow 的区别
  9. MFC中 使用Tab Control 控件在对话框中添加属性页
  10. 漫画小程序支持流量主,自动采集资源,漫画源码漫画小程序源码简单即可发布
  11. MDM-WIFI(QCA9377,QCA6174)
  12. **容易混淆的4中park变换**(转载)
  13. qt plugins 插件框架
  14. Docker容器实现跨主机文件共享(NFS服务器)
  15. DataCastle员工离职预测数据竞赛个人总结
  16. cairo学习简单总结
  17. AIO600 IPPBX电话交换机对接联通移动IMS服务器
  18. MAC OS下免费下载YouTube
  19. Vitas - star 歌词,拼音版
  20. 学好计算机的用途,学电脑的用途是什么

热门文章

  1. hostapd 安装 802.1X认证
  2. Generic patch v2.6 for TabsStudio and DevArt Entity Developer -屈指可数的更新版
  3. 红外线人体感应灯arduino_第五章 自制一盏人体感应灯(人体红外传感器SR501)(Arduino边做边学:从点亮Led到物联网)...
  4. 用户激励体系:等级体系应如何设计?
  5. process launch failed: failed to get the task for process 7680
  6. nodejs 逐行读取文件的两种方式
  7. 基于CH375的智能数据采集卡设计分析
  8. 似乎总有一些事情是难以忘怀的
  9. 微软在收购诺基亚之初就已决心裁员了吗?
  10. SSD+HDD安装双系统(win10+Ubuntu16.04)