public class CodeDecode {
    /*变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:
      (1)若已知字符串的当前字符不是大于0的数字字符,则复制该字符与新字符串中;
      (2)若以已知字符串的当前字符是一个数字字符,且他之后没有后继字符,则简单地将它复制到新字符串中;
      (3)若以已知字符串的当前字符是一个大于0的数字字符,并且还有后继字符,设该数字字符的面值为n,
         则将它的后继字符(包括后继字符是一个数字字符) 重复复制n+1 次到新字符串中;
      (4)以上述一次变换为一组,在不同组之间另插入一个下划线'_'用于分隔;
      (5)若已知字符串中包含有下划线'_',则变换为用"/UL".*/
    // by fengzh.
    public String decode2(String oldStr) {
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<oldStr.length();i++) {
            char ch = oldStr.charAt(i);
            if(Character.isDigit(ch)){
                if(ch=='0'){
                    sb.append(ch);
                } else {
                    if(i==oldStr.length()-1){
                        sb.append(ch);
                    } else {
                        int n = ch - '0';
                        char nextCh = oldStr.charAt(i+1);
                        for(int j=0;j<n+1;j++){
                            sb.append(nextCh);
                        }
                    }
                }
                if(i!=oldStr.length()-1){
                    sb.append('_');
                }
            } else if(ch=='_') {
                sb.append("/UL");
            } else {
                if(i!=oldStr.length()-1){
                    sb.append(ch);
                    sb.append('_');
                }
            }
        }
        return sb.toString();
    }

    public String pub = "";

    public void decode(String str) {
        if (str.charAt(0) == '_') {
            pub = pub + "//UL";
        } else if ("123456789".indexOf(str.charAt(0)) == -1) {
            pub = pub + str.charAt(0) + "_";
        } else if (str.length() == 1) {
            pub = pub + str;
            return;
        } else {
            for (int i = 0; i < "123456789".indexOf(str.charAt(0)) + 2; i++)
                pub = pub + str.charAt(1);
            pub = pub + "_";
        }
        if (str.length() != 1)
            this.decode(str.substring(1));
    }

    public static void main(String[] args) {
        CodeDecode d = new CodeDecode();
        String oldStr = "24ab_2t2";
        // d.decode("24ab_2t2"); // 结果:444_aaaaa_a_b_//ULttt_t_2
        d.pub = d.decode2(oldStr); // 结果:444_aaaaa_a_b_/ULttt_t_2
        System.out.println(d.pub);
    }
}

一道笔试题:给定编码规则,实现decode()方法的更多相关文章

  1. Java中有关构造函数的一道笔试题解析

    Java中有关构造函数的一道笔试题解析 1.详细题目例如以下 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与c ...

  2. 一道笔试题来理顺Java中的值传递和引用传递

      题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = ...

  3. 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...

  4. 一道笔试题和UML思想 ~

    一句软件工程界的名言,让我想起了一个和一道笔试题有关的故事.希望更多的人了解 UML 背后的思想比他的语法更重要,是笔者写作本文的一点小愿望. 一.从一句软件工程名言说起 对很多事情的处理上,东西方都 ...

  5. 由阿里巴巴一道笔试题看Java静态代码块、静态函数、动态代码块、构造函数等的执行顺序

    一.阿里巴巴笔试题: public class Test { public static int k = 0; public static Test t1 = new Test("t1&qu ...

  6. 转:一道笔试题-将int型数组强制转换为char*,再求strlen,涉及大小端

    写出如下程序运行结果: #include<stdio.h> #include<string.h> int main() { int a[2000]; char *p = (ch ...

  7. golang 中 string 转换 []byte 的一道笔试题

    背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...

  8. TX2017秋招笔试题之编码

    问题描述: 假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, - -, ...

  9. 通过一道笔试题浅谈javascript中的promise对象

    因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象.现在借这道题来分享下一些很基础的知识点. 下面是一个面试题目,三个promise对象捕获错误的例子,返 ...

随机推荐

  1. sql分组获取第一条或者最小一条值

    很多人都在问这个问题,现在记录一下 select id from test as a where id = (select min(b.id ) from test as b where a.pid ...

  2. 最小生成树<lct>

    题解: lct动态维护最小生成树 每次加边时若这两个之间不连通,那么直接连接 如果这两个点联通,那么就找到这条边上的最大值 如果这个大于当前边,就替换掉 但是需要注意的是lct只能维护点,不能维护边 ...

  3. Codeforces 594A - Warrior and Archer

    题目大意:给你在一条线上的n(偶数)个点,mike和alice 开始禁点,他们轮流开始,直到最后只剩下两个点, mike希望剩下的两个点距离尽可能小,alice希望剩下的两个点距离尽可能大,他们都采用 ...

  4. 敌兵布阵 HDU1166

    基础线段树 #include<cstdio> #include<iostream> using namespace std; int n,p,a,b,m,x,y,ans; st ...

  5. HDU Tody HDU2112

    不想用floyd了 也不一定适合  floyd只能处理小数据 dijkstra算法 wa了很久   一个是dijkstra里面的u   导致RE了无数次   下标溢出 还有就是注意细节  当起点和终点 ...

  6. 009 搭建Spark的maven本地windows开发环境以及测试

    在看完下面的细节之后,就会发现,spark的开发,只需要hdfs加上带有scala的IDEA环境即可.  当run运行程序时,很快就可以运行结束. 为了可以看4040界面,需要将程序加上暂定程序,然后 ...

  7. ZooKeeper典型应用场景:分布式锁

    分布式锁是控制分布式系统之间同步访问共享资源的一种方式.如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致 ...

  8. Windows10下安装Maven以及Eclipse安装Maven插件 + 创建Maven项目

    在官网下载Maven      http://maven.apache.org/download.cgi 下载下来后加压缩,将apache-maven-3.5.4文件夹复制到想要存放它的位置,我放在了 ...

  9. 解决winscp中普通用户无法上传、删除、移动文件

    上一篇博客中提到了winscp这个软件,这个软件可以利用sftp协议对linux服务器就行连接,然后方便我们对文件进行操作,但是如果是利用普通用户进行登陆的话,在对文件进行相关操作的时候会出现一些pe ...

  10. Mac电脑 阿里云ECS(ContentOS) Apache+vsftpd+nodejs+mongodb建站过程总结

    简介:我这里采用的阿里云免费提供的6个月ECS服务器:制作了一个简单的爬虫程序:里面很多功能还么做:搜索里面功能回去的数据未做处理会崩溃(大家不要点搜索功能):地址:http://loldragon. ...