Java实现字符串反转的8种或9种方法

编程技术  /  houtizong 发布于 3年前   60

注:对于第7种使用异或的方式来实现字符串的反转,如果不太看得明白的,可以参照另一篇博客:

http://josh-persistence.iteye.com/blog/2205768

 

/** *  */package com.wsheng.aggregator.algorithm.string;import java.util.Stack;/** * 8 种字符串反转的方法, 其实可以是9种方法,第9种是使用StringBuffer和StringBuilder中实现的方法 * @author Josh Wang(Sheng) *  * @email  [email protected] *  */public class StringReverse {/** * 二分递归地将后面的字符和前面的字符连接起来。 *  * @param s * @return */public static String reverse1(String s) {int length = s.length();if (length <= 1)return s;String left = s.substring(0, length / 2);String right = s.substring(length / 2, length);return reverse1(right) + reverse1(left);}/** * 取得当前字符并和之前的字符append起来 * @param s * @return */public static String reverse2(String s) {int length = s.length();String reverse = "";for (int i=0; i<length; i++)reverse = s.charAt(i) + reverse;return reverse;}/** * 将字符从后往前的append起来 * @param s * @return */public static String reverse3(String s) {char[] array = s.toCharArray();String reverse = "";for (int i = array.length - 1; i >= 0; i--) {reverse += array[i];}return reverse;}/** * 和StringBuffer()一样,都用了Java自实现的方法,使用位移来实现 * @param s * @return */public static String reverse4(String s) {return new StringBuilder(s).reverse().toString();}/** * 和StringBuilder()一样,都用了Java自实现的方法,使用位移来实现 * @param s * @return */public static String reverse5(String s) {return new StringBuffer(s).reverse().toString();}/** * 二分交换,将后面的字符和前面对应的那个字符交换 * @param s * @return */public static String reverse6(String s) {char[] array = s.toCharArray();int end = s.length() - 1;int halfLength = end / 2;for (int i = 0; i <= halfLength; i++) {char temp = array[i];array[i] = array[end-i];array[end-i] = temp;}return new String(array);}/** * 原理是使用异或交换字符串 * a=a^b;  * b=b^a;          * a=b^a; *  * @param s * @return */public static String reverse7(String s) {char[] array = s.toCharArray();    int begin = 0;  int end = s.length() - 1;    while (begin < end) {   array[begin] = (char) (array[begin] ^ array[end]);   array[end] = (char) (array[end] ^ array[begin]);   array[begin] = (char) (array[end] ^ array[begin]);   begin++;   end--;  }    return new String(array);}/** * 基于栈先进后出的原理 *  * @param s * @return */public static String reverse8(String s) {char[] array = s.toCharArray();Stack<Character> stack = new Stack<Character>();for (int i = 0; i < array.length; i++)stack.push(array[i]);String reverse = "";for (int i = 0; i < array.length; i++)reverse += stack.pop();  return reverse;}public static void main(String[] args) {System.out.println(reverse1("Wang Sheng"));System.out.println(reverse2("Wang Sheng"));System.out.println(reverse3("Wang Sheng"));System.out.println(reverse4("Wang Sheng"));System.out.println(reverse5("Wang Sheng"));System.out.println(reverse6("Wang Sheng"));System.out.println(reverse7("Wang Sheng"));System.out.println(reverse8("Wang Sheng"));}}

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客