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. FXML Stuffs (include and define)

    FXML Stuffs (include and define)Hello folks,Today I would like to blog about the FXML define and inc ...

  2. hdu 4463 有一条边必须加上 (2012杭州区域赛K题)

    耐克店 和 苹果店必须相连 Sample Input42 30 01 00 -1 1 -10 Sample Output3.41 # include <iostream> # includ ...

  3. SQL中IN和EXISTS用法的区别

    结论 1. in()适合B表比A表数据小的情况 2. exists()适合B表比A表数据大的情况 当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用. select * fro ...

  4. #3 Codeforces-865C Gotta Go Fast(期望dp)

    题意:一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每通过一关后可以选择继续下一关或者时间清0并从第一关开始,先要求通过所有关卡的时间和不 ...

  5. Codeforces 490F Treeland Tour 树形dp

    Treeland Tour 离散化之后, 每个节点维护上升链和下降链, 感觉复杂度有点高, 为啥跑这么快.. #include<bits/stdc++.h> #define LL long ...

  6. 【Java】 剑指offer(18) 删除链表中重复的结点

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重 ...

  7. BASH if/while/until loop

    #/bin/bash ]; then counter=" counter1=" echo "for loop:" $); do echo $i done ); ...

  8. JSONObject基本内容(二)

    参考内容:http://swiftlet.net/archives/category/json  十分感谢!!! 这部分的内容主要是讲述 javaBean转换为JSONObect时,如果有些属性不需要 ...

  9. Python图形编程探索系列-04-网上图片与标签组件的结合

    跳转到自己的博客 任务设定 任务:从网上找到一张图片,然后将其显示在标签上? 网上图片网站:http://pic.58pic.com/58pic/17/56/38/52w58PICtER_1024.j ...

  10. [HihoCoder1369]网络流一·Ford-Fulkerson算法

    思路: 最大流模板. #include<queue> #include<cstdio> #include<cctype> #include<vector> ...