·首先介绍一下最简单的,利用Java种的StringBuffer来进行反转。

public class Test{public static void main(String[] args) {//字符串反转String string = "hello world";String reverse = new StringBuffer(string).reverse().toString();System.out.println("字符串反转前:"+string);System.out.println("字符串反转后:"+reverse);}
}

在介绍下从网上找来的:

package com.wsheng.aggregator.algorithm.string;import java.util.Stack;/*** 8 种字符串反转的方法, 其实可以是9种方法,第9种是使用StringBuffer和StringBuilder中实现的方法* @author Josh Wang(Sheng)** @email  swang6@ebay.com**/
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"));}
}

来自:http://blog.csdn.net/u010834071/article/details/45306051

对这里面的大部分算法还是比较容易理解的,但是看到通过异或来实现的时候,就感觉有点的不懂了。通过百度,明白了其中的原理。在注释中,作者是标明了的。就是:

a = a ^ b;  //语句1
b = a ^ b;  //语句2
a = b ^ a;  //语句3

第一眼看到的时候,是真的很懵,看着像常用的两个变量的交换,但是也没有中间变量啊。在网上百度了一波,看到大佬的解释后,恍然大悟。交换两个整数其实不需要第三个中间变量(唉,脑子是个好东西,学了东西就忘)。交换两个整数a,b,先把a+b放到a中,然后b = a-b,此时b的值就是原来a的值。然后a=a-b,此时a的值就是原来b的值,完成交换。这个异或,也是同样的原理~~~

Java中的字符串反转方法相关推荐

  1. Java中替换字符串的方法

    Java中替换字符串可以用replace和replaceAll这两种,区别是, 1. replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSeq ...

  2. java中切分字符串的方法

    在我们日常工作中经常遇到截取字符串的需求,这里重点介绍两种常见的截取字符串方法. 方法一:通过split() 此方法返回的是一个字符串数组类型. 1.只传一个参数:split(String regex ...

  3. java字符串反转方法【全】

    搜集的java字符串反转方法,一般用于面试,项目中用的很少··· package com.wsheng.aggregator.algorithm.string;import java.util.Sta ...

  4. java输入一串字符串反转_反转Java中的字符串

    java输入一串字符串反转 Reverse a String in java is a good coding related interview question. I have seen inte ...

  5. Java中连接字符串的最佳方法

    最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用+运算符 使用StringB ...

  6. Java中String字符串截取几种方法(substring,split)

    Java中String字符串截取几种方法 substring,split 这是一个Java中的String的基础用法的演示. 下面通过代码对大家进行讲解 substring 这里用来ndexOf,la ...

  7. java中判断字符串是否为数字的方法 StringUtil包函数

    java中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){   for (int i = 0; i &l ...

  8. java和js中替换字符串的方法

    //java中字符串的替换方法: String a = "吴林飞-1a_,唐姐-2,周帅-3"; String f = a.replaceFirst("-", ...

  9. java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号

    java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号 介绍 数据库中很多字段都会限制长度,为了方便用户使用,在前端界面给出限制长度的提示,看网上很多写的获取字符串长度都没有 ...

最新文章

  1. android 7.0拷贝文件,Android 7.0应用间共享文件----FileProvider
  2. Android Gesture 手势识别使用实例 - Android - mobile - ITeye论坛
  3. 程序员面试100题之七:最长公共子字符串
  4. {0,1,2.....Fmax} 每个数出现的次数
  5. 熟悉html css,编写HTML和CSS的前端开发中不一定熟悉JavaScript
  6. Python | Lambda函数与示例
  7. LWCOPY为前端代码提供复制功能的插件
  8. java 小数点保留_Java小数点位数保留
  9. flutter offset_牛笔!自己用Flutter撸一个天气APP
  10. java求n个分数之和_N个快速提升分数的学习方法
  11. 数组对象 按某个属性排序
  12. 学妹要的20道Redis面试题,在这也分享一下(转载自程序羊羊哥)
  13. It has been compressed and nested jar files must be stored without compression
  14. 继续写usb gadget驱动(解决枚举失败问题)
  15. 绝地求生服务器维护需要多久,绝地求生8月4日更新到几点?绝地求生维护一次需要多长时间?...
  16. JavaSE基础笔记(全)
  17. 俞敏洪:一生只为一个女人奋斗
  18. linux上使用ftdi的串口芯片,D2XX for Linux,出现ftdi d2xx与linux上的ftdi_sio冲突问题
  19. java通过ip地址获取相应对应的城市
  20. 微软明年停止支持IE浏览器 鼓励使用Edge浏览器

热门文章

  1. 什么是数字化和数字化转型?
  2. 绝世舞姬计算机弹音乐,绝世舞姬(伴奏)
  3. java 向下转型运行时错误_8.5.2 向下转型与运行类型异常
  4. 软件产品检测测试报告找谁做?出测试报告机构推荐
  5. CAD标注的偏移尺寸和实际尺寸不同该如何解决?
  6. 联合分析法(Python实现)
  7. 有哪些能支持epub、txt格式的电子书阅读器?能在MAC上用的?
  8. 解决java网络编程IPv6问题
  9. PowerDesigner一键导入数据库所有表并画数据模型图
  10. C++_Primer_学习笔记_第十九章(特殊工具和技术)