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. C/S权限系统得到拼音和五笔的自定义函数(二)

    得到五笔: CREATE FUNCTION [dbo].[fun_getWB](@Str VARCHAR(2000)) RETURNS VARCHAR(2000) AS BEGIN DECLARE @ ...

  2. Android Studio代码调试大全

    http://blog.csdn.net/dd864140130/article/details/51560664 Android Studio目前已经成为开发android的主要工具,用熟了可谓相当 ...

  3. C#编程语法积累(二)

    9.Lambda表达式 [1]Lambda表达式缩写推演,如下图: [2]Lambda语句:=>右边有一个语句块(大括号"{}"):Lambda表达式:=>右边只有一个 ...

  4. STL容器底层数据结构的实现

    C++ STL 的实现: 1.vector      底层数据结构为数组 ,支持快速随机访问   2.list            底层数据结构为双向链表,支持快速增删   3.deque     ...

  5. Loogn.OrmLite文档

    Getting Started 一. 引入Loogn.OrmLite PM> Install-Package Loogn.OrmLite 二.引入名称空间 using Loogn.OrmLite ...

  6. Jackson ObjectMapper readValue过程

    1.整体调用栈 2.看一下调用栈的两个方法 resolve 方法中通过 Iterator i$ = this._beanProperties.iterator() 遍历属性的所有子属性,缓存对应的 d ...

  7. Leetcode分类总结(Greedy)

    贪心类题目目前除了正则匹配(Wildcard Matching)(据说其实是DP)那道还没做其他的免费题目都做了,简单做个总结. 贪心的奥义就是每一步都选择当前回合”可见范围“(即可得知的信息)内的最 ...

  8. Linux运维笔记(一)网络基础知识

    网络基础知识 一.基本概念 1.ARPANET & TCP/IP:以“软件”技术将网络硬件整合,使得不同的计算机或者数据可以通过这个软件达成数据沟通(TCP/IP技术也被称为Internet) ...

  9. 为何IT开发人员如此辛苦?

    一个本来挺简单的功能,硬是让PM(产品经理)设计的非常复杂,各种逻辑切换.这样不但用户体验不好,还容易出各种bug.为了让用户学会使用产品,用了各种引导图,什么手势引导,按钮点击引导,提示弹窗都用上了 ...

  10. adblock 下载地址

    addblock 的作用: 防止追踪.恶意域名,过滤横幅广告.弹窗广告以及视频广告.   用以支持网站的非侵入式广告将不会被屏蔽 下载地址:https://pan.baidu.com/share/li ...