Chinaunix首页 | 论坛 | 博客
  • 博客访问: 257094
  • 博文数量: 49
  • 博客积分: 110
  • 博客等级: 民兵
  • 技术积分: 510
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-13 00:59
个人简介

make it run,make it better,make it fast. https://github.com/liulanghaitun

文章分类

全部博文(49)

文章存档

2023年(1)

2022年(2)

2020年(4)

2019年(4)

2017年(15)

2016年(3)

2014年(3)

2013年(14)

分类: Java

2014-02-25 19:52:22

题目: 字符串反序输出

输入:today is a good day!

输出:day! good a is today

思路:

1.提取构造反序输出模板

如果是空字符,则用0代替,如果不是空字符,则用1代替.

2.提取其中的单个字符串

通过去除前后空格,然后递归判断内部是否还有空字符,如果有递归,否则返回.构造字符串序列.

3.将模板与提取后的字符串适配

将字符串序列与模板适配,0和1用字符序列替换,得到反转序列.



点击(此处)折叠或打开

  1. /**
  2.  * 字符串反转
  3.  *
  4.  * @author renwei
  5.  *
  6.  */
  7. public class ReserverString
  8. {
  9.     private static final char ZERO = '0';
  10.     private static final char ONE = '1';
  11.     private static final char SPACE = ' ';
  12.     
  13.     /**
  14.      * 反转字符串
  15.      *
  16.      * @param input
  17.      * 输入字符串
  18.      * @return 反转后的字符串
  19.      */
  20.     private static String reserverString(String input)
  21.     {
  22.         final StringBuilder strBuilder = new StringBuilder();
  23.         final String template = constructTemplate(input);
  24.         extractStr(input, strBuilder);
  25.         return adapterTemplate(strBuilder, template);
  26.     }
  27.     
  28.     /**
  29.      * 构造模板
  30.      *
  31.      * @param input
  32.      * 输入字串
  33.      * @return 反转后模板
  34.      */
  35.     private static String constructTemplate(String input)
  36.     {
  37.         final StringBuilder base = new StringBuilder();
  38.         for (int index = 0; index < input.length(); index++)
  39.         {
  40.             if (input.charAt(index) == SPACE)
  41.             {
  42.                 base.append(ZERO);
  43.             }
  44.             else
  45.             {
  46.                 base.append(ONE);
  47.             }
  48.         }
  49.         return base.reverse().toString();
  50.     }
  51.     
  52.     /**
  53.      * 提取单个字串
  54.      *
  55.      * @param value
  56.      * 输入字串
  57.      * @param result
  58.      * 收集实际字串
  59.      */
  60.     private static void extractStr(String value, StringBuilder result)
  61.     {
  62.         String trimStr = value.trim();
  63.         final int index = trimStr.indexOf(" ");
  64.         if (index == -1)
  65.         {
  66.             result.append(trimStr);
  67.         }
  68.         else
  69.         {
  70.             final String baseStr = trimStr.substring(0, index);
  71.             final String rest = trimStr.substring(index, trimStr.length());
  72.             extractStr(rest, result);
  73.             result.append(baseStr);
  74.         }
  75.     }
  76.     
  77.     /**
  78.      * 适配模板与字符串
  79.      *
  80.      * @param value
  81.      * @param template
  82.      * @return
  83.      */
  84.     private static String adapterTemplate(StringBuilder value, String template)
  85.     {
  86.         final StringBuilder result = new StringBuilder();
  87.         int base = 0;
  88.         for (int index = 0; index < template.length(); index++)
  89.         {
  90.             if (template.charAt(index) == ZERO)
  91.             {
  92.                 result.append(" ");
  93.             }
  94.             else if (template.charAt(index) == ONE)
  95.             {
  96.                 result.append(value.toString().charAt(base++));
  97.             }
  98.         }
  99.         return result.toString();
  100.     }
  101.     
  102.     /**
  103.      * 测试
  104.      *
  105.      * @param args
  106.      */
  107.     public static void main(String[] args)
  108.     {
  109.         String input = " today is a good day! ";
  110.         System.out.println("input==" + input);
  111.         final String result = reserverString(input);
  112.         System.out.println("result==" + result);
  113.     }
  114. }
结果输出:

input== today is a good day!
result== day! good a is today

阅读(2173) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~