Java中5种方式实现String反转

 更新时间:2016年06月30日 10:47:28   投稿:jingxian  
下面小编就为大家带来一篇Java中5种方式实现String反转。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。

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

一、数组实现String反转

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

二、栈实现String反转

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

三、逆序遍历实现String反转

//用逆序遍历实现String反转

  public String reverseBySort(){
    if(str == null || str.length() == 1){
      return null;
    }
    StringBuffer sb = new StringBuffer();
    for (int i = str.length() -1 ; i >= 0; i--) {
      sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符
    }
    return sb.toString();
  }

四、位运算实现String反转

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

五、递归实现String反转

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

六、测试

public class Test {
  public static void main(String[] args) {
    String s = "123456";
    Reverse r = new Reverse(s);
    System.out.println(r.reverseByArray());
    System.out.println(r.reverseByStack());
    System.out.println(r.reverseBySort());
    System.out.println(r.reverseByBit());
    System.out.println(r.reverseByRecursive(s));
    
  }
}

七、结果

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

public class Reverse {
  private String str = null;
  
  public Reverse(String str){
    this.str = str;
  }
  
  //数组实现String反转
  public String reverseByArray(){
    if(str == null || str.length() == 1){
      return null;
    }
    char[] ch = str.toCharArray();//字符串转换成字符数组
    for(int i = 0 ; i < ch.length/2 ; i++){
      char temp = ch[i];
      ch[i] = ch[ch.length-i-1];
      ch[ch.length-i-1] = temp;
    }
    return new String(ch);
  }
  //用栈实现String反转
  public String reverseByStack(){
    if(str == null || str.length() == 1){
      return null;
    }
    Stack<Character> stack = new Stack<Character>();
    char[] ch = str.toCharArray();//字符串转换成字符数组
    for (char c : ch) {
      stack.push(c);//每个字符,推进栈
    }
    for (int i = 0; i < ch.length; i++) {
      ch[i] = stack.pop();//移除这个堆栈的顶部对象
    }
    return new String(ch);
  }
  //用逆序遍历实现String反转
  public String reverseBySort(){
    if(str == null || str.length() == 1){
      return null;
    }
    StringBuffer sb = new StringBuffer();
    for (int i = str.length() -1 ; i >= 0; i--) {
      sb.append(str.charAt(i));//使用StringBuffer从右往左拼接字符
    }
    return sb.toString();
  }
  //使用位运算实现String反转
  public String reverseByBit() { 
    if(str == null || str.length() == 1){
      return null;
    }
    char[] ch = str.toCharArray();//字符串转换成字符数组
    int len = str.length(); 
    for(int i= 0; i< len/ 2; i++) { 
      ch[i]^= ch[len- 1- i]; 
      ch[len- 1- i]^= ch[i]; 
      ch[i]^= ch[len- 1- i]; 
    }
    return new String(ch);
  }
  //使用递归实现String反转
  public String reverseByRecursive(String str){
    if(str == null || str.length() == 0){
      return null;
    }
    if(str.length() == 1){
      return str;
    } else {
      //从下标为1开始截取字符串,在返回下标为0的字符
      return reverseByRecursive(str.substring(1)) + str.charAt(0);
    }
  }
}  

以上这篇Java中5种方式实现String反转就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java同步非阻塞模式NIO处理IO数据

    Java同步非阻塞模式NIO处理IO数据

    这篇文章主要介绍了Java同步非阻塞模式NIO处理IO数据,服务器实现模式为一个请求一个线程,即客户端发送的链接请求都会注册到选择器上,选择器轮询到连接有IO请求时才启动一个线程进行处理,需要的朋友可以参考下
    2023-10-10
  • Mybatis中updateBatch实现批量更新

    Mybatis中updateBatch实现批量更新

    本文主要介绍了Mybatis中updateBatch实现批量更新,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • HashMap 和 HashSet的区别

    HashMap 和 HashSet的区别

    本文主要介绍HashMap 和 HashSet的区别,这里整理了详细的资料来说名两者的区别,并说明如何使用该方法,有需要的小伙伴可以参考下
    2016-09-09
  • java中正则表达式实例详解

    java中正则表达式实例详解

    这篇文章主要介绍了java中正则表达式实例详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • 教你怎么用java一键自动生成数据库文档

    教你怎么用java一键自动生成数据库文档

    最近小编也在找这样的插件,就是不想写文档了,浪费时间和心情啊,果然我找到一款比较好用,操作简单不复杂.screw 是一个简洁好用的数据库表结构文档的生成工具,支持 MySQL、Oracle、PostgreSQL 等主流的关系数据库.需要的朋友可以参考下
    2021-05-05
  • Spring AOP 的组成和实现

    Spring AOP 的组成和实现

    这篇文章主要介绍了Spring AOP 的组成和实现,AOP 是一种思想,Spring AOP 是这种思想的具体实现,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Java线程池队列PriorityBlockingQueue和SynchronousQueue详解

    Java线程池队列PriorityBlockingQueue和SynchronousQueue详解

    这篇文章主要为大家介绍了Java线程池队列PriorityBlockingQueue和SynchronousQueue详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 对SpringMVC的@RequestParam的解释

    对SpringMVC的@RequestParam的解释

    下面小编就为大家带来一篇对SpringMVC的@RequestParam的解释。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java中的String、StringBuilder、StringBuffer三者的区别详解

    Java中的String、StringBuilder、StringBuffer三者的区别详解

    这篇文章主要介绍了Java中的String、StringBuilder、StringBuffer三者的区别详解,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,需要的朋友可以参考下
    2023-12-12
  • gRPC与SpringBoot整合思路和步骤

    gRPC与SpringBoot整合思路和步骤

    在现代微服务架构中,gRPC已经成为了非常受欢迎的通信协议,与SpringBoot整合,它为开发者提供了简洁、高效构建分布式应用,在整合gRPC与SpringBoot时,将gRPC的服务端和客户端分别封装到SpringBoot的应用中,感兴趣的朋友一起看看吧
    2023-08-08

最新评论