博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串反转
阅读量:6955 次
发布时间:2019-06-27

本文共 2944 字,大约阅读时间需要 9 分钟。

版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/44928377
字符串反转。
        好了,既然找不到也不必耿耿于怀了。今天读了《高效能程序员的修炼》第四章,发现自己好烂,如果按照作者的看法,我是无论如何都入不了他的法眼,于是乎,我告诉自己,从零开始,把作者提出的面试题按照Java来写一遍,无论是参考别人还是自己略能想得到的办法,亲自动手把它们敲出来,并且记录下来吧!
        写一个函数把字符串反转,作为本系列的开篇,Java自然也有很多种实现方式,相信很多人也都曾做过这样的博客,但是我依然要把这些记录在自己的博客之中,尽我所能掌握它们:
package com.honzh.mwq.reverse;import java.util.Arrays;import java.util.Collections;import java.util.List;import java.util.Stack;public class Test { public static void main(String[] args) {  // 第一种,我最先能想得到的,利用下标倒序把字符取出来重组  System.out.println(reverse1("diyizhong"));  // 第二种,我想了半天才想通,我发现我不适合编程了都  // 循环依然是从0到length-1,只不过是将先取出来的放在后取出来的后面  System.out.println(reverse2("dierzhong"));  // 第三种,利用Collections类的反转list的方式,比较麻烦了  System.out.println(reverse3("disanzhong"));  // 第四种,这种比第三种更加简洁一些,不过我自己倒是对Collections的反转方法记忆比较深刻  // 而对于StringBuilder或者StringBuffer的记忆不是很深刻,那么现在我记住了  System.out.println(reverse4("disizhong"));  // 第五种,利用堆栈,所谓的先进后出  // 当然,首先你先从API中了解一下stack吧,它是对vector的扩展,通过push进行放入操作,然后通过pop方法进行弹出  // 我认为stack还是很有必要进行深入的研究,看看源码是怎么扩展的,我一定要掌握  System.out.println(reverse5("diwuzhong"));  // 第六种,是完全copy别人的,我甚至都无法弄明白为什么?我一直觉得自己是一个逻辑痴呆者  // 我不知道自己是怎么经历了漫漫编程生涯的7年时光,包括大学哈,我一直很怀疑我自己能走多远,  // 因为对于第六种的方式,我是想清楚一会过一会就会马上忘记的那种,我很奇怪自己是靠什么活过来的  // 这一直都是我的痛点,我对各种排序算法有点过敏,我内心很厌恶这些排序算法,然而好像学习  // 编程的人必须要了解。否则不配做一个程序员,而我就属于不配的这种。  // 这种做法无非就是先将第一个位置的字符替换成和在位置上对立的字符  // 其关键在于字符串的长度是奇数还是偶数的时候是否依然能够对称处理,显然,这种做法在处理1234的时候会循环两次  // 在处理123的时候也是两次,123的时候会把2作为对称的位置进行处理  // 但是最关键的还在于,其处理次数显然是最有效率的  // 犹记得当时一个面试的应聘者这样把题答出来了,我当时很惭愧,觉得自己无法面对自己的上司,因为我不曾想过还有这样的处理方法  // 这个方式还是很值得好好记住的  System.out.println(reverse6("diliuzhong"));  System.out.println(reverse6("1234"));  System.out.println(reverse6("123")); } public static String reverse1(String old) {  String result = "";  for (int i = old.length() - 1; i >= 0; i--) {   result += String.valueOf(old.charAt(i));  }  return result; } public static String reverse2(String old) {  String result = "";  for (int i = 0; i < old.length(); i++) {   result = old.charAt(i) + result;  }  return result; } public static String reverse3(String old) {  String result = "";  List
olds = Arrays.asList(old.split("")); Collections.reverse(olds); for (String s : olds) { result += s; } return result; } public static String reverse4(String old) { return new StringBuffer(old).reverse().toString(); // return new StringBuilder(old).reverse().toString(); } public static String reverse5(String old) { char[] chars = old.toCharArray(); Stack
oldStack = new Stack
(); for (Character c : chars) { oldStack.push(c); } String result = ""; while (!oldStack.empty()) { result += oldStack.pop(); } return result; } public static String reverse6(String old) { char[] chars = old.toCharArray(); int n = chars.length - 1; for (int i = 0; i <= n / 2; i++) { char temp = chars[i]; chars[i] = chars[n - i]; chars[n - i] = temp; } return new String(chars); }}
你可能感兴趣的文章
(转)Objective-C的单例模式(singleton)
查看>>
细说 ASP.NET控制HTTP缓存(转)
查看>>
使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、播放列表)...
查看>>
在网页div,table,p,span,body,等很多元素中输入内容.
查看>>
采用oracle存储过程读取excel文件更新表
查看>>
JRuby 1.7.0 发布:默认使用Rudy1.9 模式,并可使用InvokeDynamic
查看>>
详解PHP的SQL注入(转)
查看>>
HTML5实践 -- CSS3 Media Queries
查看>>
44个独具创意的404错误页面
查看>>
身份证信息查询系统
查看>>
jqueryMobile框架页面与页面切换
查看>>
对PostgreSQL中tablespace 与 database, table的理解
查看>>
图像编辑之一键特效(Lomo,反转负冲,柔光)
查看>>
linux modprobe命令参数及用法详解--linux加载模块命令
查看>>
从SQLSERVER/MYSQL数据库中随机取一条或者N条记录
查看>>
flex中dispatchEvent的用法(自定义事件) .
查看>>
html网页编码问题
查看>>
【Java】环境变量的配置
查看>>
排序算法——快速排序(转)
查看>>
上海交通大学2003年数学分析考研试题
查看>>