这里介绍Java中5中实现String反转的方式。

一、数组实现String反转

  1. //数组实现String反转
  2. public String reverseByArray(){
  3. if(str == null || str.length() == 1){
  4. return null;
  5. }
  6. char[] ch = str.toCharArray();//字符串转换成字符数组
  7. for(int i = 0 ; i < ch.length/2 ; i++){
  8. char temp = ch[i];
  9. ch[i] = ch[ch.length-i-1];
  10. ch[ch.length-i-1] = temp;
  11. }
  12. return new String(ch);
  13. }

二、栈实现String反转

  1. //用栈实现String反转
  2. public String reverseByStack(){
  3. if(str == null || str.length() == 1){
  4. return null;
  5. }
  6. Stack<Character> stack = new Stack<Character>();
  7. char[] ch = str.toCharArray();//字符串转换成字符数组
  8. for (char c : ch) {
  9. stack.push(c);//每个字符,推进栈
  10. }
  11. for (int i = 0; i < ch.length; i++) {
  12. ch[i] = stack.pop();//移除这个堆栈的顶部对象
  13. }
  14. return new String(ch);
  15. }

三、逆序遍历实现String反转

  1. //用逆序遍历实现String反转
  2.  
  3. public String reverseBySort(){
  4. if(str == null || str.length() == 1){
  5. return null;
  6. }
  7. StringBuffer sb = new StringBuffer();
  8. for (int i = str.length() -1 ; i >= 0; i--) {
  9. sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符
  10. }
  11. return sb.toString();
  12. }

四、位运算实现String反转

  1. //使用位运算实现String反转
  2. public String reverseByBit() {
  3. if(str == null || str.length() == 1){
  4. return null;
  5. }
  6. char[] ch = str.toCharArray();//字符串转换成字符数组
  7. int len = str.length();
  8. for(int i= 0; i< len/ 2; i++) {
  9. ch[i]^= ch[len- 1- i];
  10. ch[len- 1- i]^= ch[i];
  11. ch[i]^= ch[len- 1- i];
  12. }
  13. return new String(ch);
  14. }

五、递归实现String反转

  1. //使用递归实现String反转
  2. public String reverseByRecursive(String str){
  3. if(str == null || str.length() == 0){
  4. return null;
  5. }
  6. if(str.length() == 1){
  7. return str;
  8. } else {
  9. //从下标为1开始截取字符串,在返回下标为0的字符
  10. return reverseByRecursive(str.substring(1)) + str.charAt(0);
  11. }
  12. }

六、测试

  1. public class Test {
  2. public static void main(String[] args) {
  3. String s = "123456";
  4. Reverse r = new Reverse(s);
  5. System.out.println(r.reverseByArray());
  6. System.out.println(r.reverseByStack());
  7. System.out.println(r.reverseBySort());
  8. System.out.println(r.reverseByBit());
  9. System.out.println(r.reverseByRecursive(s));
  10.  
  11. }
  12. }

七、结果

八、用于String反转的全部代码

  1. public class Reverse {
  2. private String str = null;
  3.  
  4. public Reverse(String str){
  5. this.str = str;
  6. }
  7.  
  8. //数组实现String反转
  9. public String reverseByArray(){
  10. if(str == null || str.length() == 1){
  11. return null;
  12. }
  13. char[] ch = str.toCharArray();//字符串转换成字符数组
  14. for(int i = 0 ; i < ch.length/2 ; i++){
  15. char temp = ch[i];
  16. ch[i] = ch[ch.length-i-1];
  17. ch[ch.length-i-1] = temp;
  18. }
  19. return new String(ch);
  20. }
  21. //用栈实现String反转
  22. public String reverseByStack(){
  23. if(str == null || str.length() == 1){
  24. return null;
  25. }
  26. Stack<Character> stack = new Stack<Character>();
  27. char[] ch = str.toCharArray();//字符串转换成字符数组
  28. for (char c : ch) {
  29. stack.push(c);//每个字符,推进栈
  30. }
  31. for (int i = 0; i < ch.length; i++) {
  32. ch[i] = stack.pop();//移除这个堆栈的顶部对象
  33. }
  34. return new String(ch);
  35. }
  36. //用逆序遍历实现String反转
  37. public String reverseBySort(){
  38. if(str == null || str.length() == 1){
  39. return null;
  40. }
  41. StringBuffer sb = new StringBuffer();
  42. for (int i = str.length() -1 ; i >= 0; i--) {
  43. sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符
  44. }
  45. return sb.toString();
  46. }
  47. //使用位运算实现String反转
  48. public String reverseByBit() {
  49. if(str == null || str.length() == 1){
  50. return null;
  51. }
  52. char[] ch = str.toCharArray();//字符串转换成字符数组
  53. int len = str.length();
  54. for(int i= 0; i< len/ 2; i++) {
  55. ch[i]^= ch[len- 1- i];
  56. ch[len- 1- i]^= ch[i];
  57. ch[i]^= ch[len- 1- i];
  58. }
  59. return new String(ch);
  60. }
  61. //使用递归实现String反转
  62. public String reverseByRecursive(String str){
  63. if(str == null || str.length() == 0){
  64. return null;
  65. }
  66. if(str.length() == 1){
  67. return str;
  68. } else {
  69. //从下标为1开始截取字符串,在返回下标为0的字符
  70. return reverseByRecursive(str.substring(1)) + str.charAt(0);
  71. }
  72. }
  73. }

全部代码

5中方式实现String反转的更多相关文章

  1. 20175212童皓桢 在IDEA中以TDD的方式对String类和Arrays类进行学习

    20175212童皓桢 在IDEA中以TDD的方式对String类和Arrays类进行学习 要求 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 ...

  2. 20155312张竞予 20170510实践一:在IDEA中以TDD的方式对String类和Arrays类进行学习

    实践题目 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 String类 charAt split Arrays类 sort binarySea ...

  3. Java中有趣的String、StringBuffer与StringBuilder

    String介绍 String类属于java.lang包中,String类是不可变类,任何对String的改变都会引发新的String对象的生成. 创建String的两种方式: 1.通过构造器创建:S ...

  4. 将一个字符串进行反转:将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”

    将一个字符串进行反转:将字符串中指定部分进行反转.比如"abcdefg"反转为"abfedcg"方式一:转换为char[] public String reve ...

  5. java中特殊的String类型

    Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String("abc"); 第 ...

  6. c# 发送Email的2中方式

    先来第一种 // 版权所有 ZhuoYue Co.,Ltd 卓越一通秘密信息 // 文件名称:MyEmailByCDO.cs // 作 者:huangzh // 创建日期:2015-08-20 16: ...

  7. 07_Android操作sqllite数据库(包括2中方式操作数据的方式),单元测试,BaseAdapter的使用,自定义view的综合使用案例

     1 目标从sqllite中读取数据并显示如下: MainActivity对应的界面 MainActivity2对应的界面           2  配置Android的清单文件 <?xml ...

  8. java和js中int和String相互转换常用方法整理

    java中int和String的相互转换常用的几种方法: int  > String int i=10;String s="";第一种方法:s=i+""; ...

  9. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

随机推荐

  1. delphi 去掉TreeView水平滚动条

        使用API函数:声明 FUNCTION ulong ShowScrollBar(ulong hwnd,ulong wBar,ulong bShow) LIBRARY "user32. ...

  2. TOJ 4325 RMQ with Shifts / 线段树单点更新

    RMQ with Shifts 时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte 描述 In the traditional RMQ (Range M ...

  3. hibernate 实体关系映射笔记

    @经常使用属性说明:     @Entity:实体类     @Table:指定相应数据表     @Id:主键,使用能够为null值的类型,假设实体类没有保存到数据库是一个暂时状态     @Col ...

  4. 解决easyui-datagrid在ie中无法reload问题

    easyui在页面载入时,会自己主动填充datagrid中的数据,当加入.改动.删除后,会触发reload事件,对datagrid进行又一次载入. 这个过程在FireFox中没有问题,用firebug ...

  5. Python学习 之 正则表达式

    1.简单的正则表达式 import re s=r'abc' re.findall(s,"aaaaaaaaaaaaaaa") #结果为[] re.findall(s,"ab ...

  6. ESX虚拟机文件列表详解

    http://jackiechen.blog.51cto.com/196075/210492 关闭状态时的文件列表: *-flat.vmdk:虚拟机的原始磁盘文件,包含整个虚拟机镜像.   *.nvr ...

  7. Matrix multiplication hdu4920

    Problem Description Given two matrices A and B of size n×n, find the product of them. bobo hates big ...

  8. Android调用相册截取图片遇到的问题

    1.在Android中可以使用如下的方式来调用相册,选择图片进行裁剪使用,昨天在开发的时候遇到一个问题 private void cropBigImageUri(Uri uri, int output ...

  9. android的个人代码总结

    1.关于一个动作的实现,在Activity中可以用实现一个接口的方式来实现,在实现代码时可用IF进行判断是那个要执行的动作: 2.在软件开发过程中,软件界面的布局也非常重要:还是要多看看:

  10. struts2 后台action向前端JSP传递参数的问题

    后台有个方法,里面部分代码如下: System.out.print("alter:"+user.getId()); User temp=userservice.getUserByU ...