Java中的字符串反转方法
·首先介绍一下最简单的,利用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中的字符串反转方法相关推荐
- Java中替换字符串的方法
Java中替换字符串可以用replace和replaceAll这两种,区别是, 1. replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSeq ...
- java中切分字符串的方法
在我们日常工作中经常遇到截取字符串的需求,这里重点介绍两种常见的截取字符串方法. 方法一:通过split() 此方法返回的是一个字符串数组类型. 1.只传一个参数:split(String regex ...
- java字符串反转方法【全】
搜集的java字符串反转方法,一般用于面试,项目中用的很少··· package com.wsheng.aggregator.algorithm.string;import java.util.Sta ...
- java输入一串字符串反转_反转Java中的字符串
java输入一串字符串反转 Reverse a String in java is a good coding related interview question. I have seen inte ...
- Java中连接字符串的最佳方法
最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用+运算符 使用StringB ...
- Java中String字符串截取几种方法(substring,split)
Java中String字符串截取几种方法 substring,split 这是一个Java中的String的基础用法的演示. 下面通过代码对大家进行讲解 substring 这里用来ndexOf,la ...
- java中判断字符串是否为数字的方法 StringUtil包函数
java中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i &l ...
- java和js中替换字符串的方法
//java中字符串的替换方法: String a = "吴林飞-1a_,唐姐-2,周帅-3"; String f = a.replaceFirst("-", ...
- java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号
java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号 介绍 数据库中很多字段都会限制长度,为了方便用户使用,在前端界面给出限制长度的提示,看网上很多写的获取字符串长度都没有 ...
最新文章
- android 7.0拷贝文件,Android 7.0应用间共享文件----FileProvider
- Android Gesture 手势识别使用实例 - Android - mobile - ITeye论坛
- 程序员面试100题之七:最长公共子字符串
- {0,1,2.....Fmax} 每个数出现的次数
- 熟悉html css,编写HTML和CSS的前端开发中不一定熟悉JavaScript
- Python | Lambda函数与示例
- LWCOPY为前端代码提供复制功能的插件
- java 小数点保留_Java小数点位数保留
- flutter offset_牛笔!自己用Flutter撸一个天气APP
- java求n个分数之和_N个快速提升分数的学习方法
- 数组对象 按某个属性排序
- 学妹要的20道Redis面试题,在这也分享一下(转载自程序羊羊哥)
- It has been compressed and nested jar files must be stored without compression
- 继续写usb gadget驱动(解决枚举失败问题)
- 绝地求生服务器维护需要多久,绝地求生8月4日更新到几点?绝地求生维护一次需要多长时间?...
- JavaSE基础笔记(全)
- 俞敏洪:一生只为一个女人奋斗
- linux上使用ftdi的串口芯片,D2XX for Linux,出现ftdi d2xx与linux上的ftdi_sio冲突问题
- java通过ip地址获取相应对应的城市
- 微软明年停止支持IE浏览器 鼓励使用Edge浏览器
热门文章
- 什么是数字化和数字化转型?
- 绝世舞姬计算机弹音乐,绝世舞姬(伴奏)
- java 向下转型运行时错误_8.5.2 向下转型与运行类型异常
- 软件产品检测测试报告找谁做?出测试报告机构推荐
- CAD标注的偏移尺寸和实际尺寸不同该如何解决?
- 联合分析法(Python实现)
- 有哪些能支持epub、txt格式的电子书阅读器?能在MAC上用的?
- 解决java网络编程IPv6问题
- PowerDesigner一键导入数据库所有表并画数据模型图
- C++_Primer_学习笔记_第十九章(特殊工具和技术)