encode()和decode()
题目
请您用java语言实现两个函数encode()和decode(),分别实现对字符串的变换和复原.变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:
- 若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
- 若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中;
- 若已知字符串的当前字符是一个大于0的数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
- 以上述一次变换为一组,在不同组之间另插入一个下划线’_’用于分隔;
- 若已知字符串中包含有下划线’_’,则变换为 ”\UL” 。
复原函数decode()做变换函数encode()的相反的工作.按照上述规则逆运算,变回原来的字符串。
例如:encode()函数对字符串24ab_2t2的变换结果为 444_aaaaa_a_b_\UL_ttt_t_2
注:
题目的条件一有歧义
一种理解是:当前字符是一个小于等于0的数字字符;
第二种理解是当前字符是一个除了1-9的任意字符。
以下是基于第二种意思理解进行的解答。
假设字符为String str, n = str.length(); 当前字符为c = str[i]
1.进行encode()判断的条件:
(1)、c是等于0的数字 复制该字符
c是一般字符,且不为”_” 复制该字符
以上两个条件等同于:c是一个除了1-9,除了”_”的任意字符
(5)、c是一般字符,且为”_” 转换为”\Ul”
(2)、c是数字,且i=n-1 复制该字符
(3)、c是数字,且i< n-1 且 c > 0 复制(k+1)次后面的一个字符
以上四个条件拆分如下:
c == 0 i==n-1 复制该字符
i!=n-1 复制该字符
c是1-9的数字, 且 i = n - 1 复制该字符 且 i < n - 1 复制(k + 1)次后面的一个字符
c是一般字符,且为”_” 转换为”\Ul”
c是一般字符,且不为”_” 转换为”\Ul”
再化为如下判断条件:
c是1-9的数字, 且 i < n - 1 复制(k+1)次后面的一个字符
c除1-9,且为”_” 转换为”\Ul”
其余复制该字符
(4)、每个字符译码结束后加一个下划线”_”
code:
/**
* 译码
*
* @param str 要译码的字符串
* @return 译码后的字符串
*/
public String