`
Josh_Persistence
  • 浏览: 1628503 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

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

阅读更多

注:对于第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  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"));
	}
}

 

2
2
分享到:
评论
2 楼 freezingsky 2015-04-24  
除了异或那个还有点意思。其他的,不知道说啥好!
1 楼 一个java程序员 2015-04-24  
  

突然想到了茴香豆的茴字有几种写法。

相关推荐

    java 用递归实现字符串反转

    java 用递归实现字符串反转 java 用递归实现字符串反转

    java递归字符串反转

    网上绝大部分java递归实现字符串反转缺少字符串判空条件,我加了上去。

    java实现字符串反转案例

    主要为大家详细介绍了java实现字符串反转,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    java实现字符串反转

    主要为大家详细介绍了java实现字符串反转,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java 实例 - 压栈出栈的方法实现字符串反转源代码-详细教程.zip

    Java 实例 - 压栈出栈的方法实现字符串反转源代码-详细教程.zip

    java实现字符串翻转输出

    利用java实现字符串的反转,字符串中简单的函数利用

    Java实现的简单字符串反转操作示例

    主要介绍了Java实现的简单字符串反转操作,结合实例形式分别描述了java遍历逆序输出以及使用StringBuffer类的reverse()方法两种字符串反转操作技巧,需要的朋友可以参考下

    javascript实现字符串反转的方法

    本文实例讲述了javascript实现字符串反转的方法。分享给大家供大家参考。具体实现方法如下: //变量交换 方法 var a=0,b=1,c=2; a=[b,b=c,c=a][0]; //正文 var array='abcdefgh'; function Reverse(arr){ var arr1...

    Java 字符串反转实现代码

    主要介绍了 Java 字符串反转实现代码的相关资料,需要的朋友可以参考下

    (Java)反转字符串单词,但不改变标点符号的位置

    用java编程实现反转字符串单词,但不改变标点符号的位置,简单易懂

    java验证回文字符串工具类

    // 把字符串反转 int count = 0; for (int i = 0; i (); i++) { if (str.charAt(i) == sb.charAt(i)) { count++; //统计相同字符的个数 } } if (count == str.length()) { return true; } else {

    javascript 实现字符串反转的三种方法

    第一种方法 代码如下:var str = “abcdef”; console.log( str.split(“”).reverse().join(“”) );第二种方法: 代码如下:var str=”abcdef” var i=str.length; i=i-1; for (var x = i; x &gt;=0; x–) { [removed]...

    java 字符串反转的实例详解

    主要介绍了java 字符串反转的实例详解的相关资料,这里提供实现代码帮助大家学习参考这部分内容,需要的朋友可以参考下

    javascript 不用reverse实现字符串反转的代码

    [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]JavaScript reverse() 方法 在本例中,我们将创建一个数组,然后颠倒其元素的顺序: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]输出: 代码如下: George,John...

    Java实现 LeetCode 541 反转字符串 II(暴力大法)

    541. 反转字符串 II 给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前...

    Java反转字符串和相关字符编码的问题解决

    反转字符串一直被当作是简单问题,大家的思想主要就是利用遍历,首尾交换字符实现字符串的反转。例如下面的代码,就可以简单实现反转。

    java递归法求字符串逆序

    主要介绍了java递归法求字符串逆序,涉及java递归调用的相关操作技巧,需要的朋友可以参考下

    java实现常见算法

    测试一个链表是否是循环链表java实现 找出单链表的中间节点 求解约瑟环问题 单链表反转问题 最大子序列和问题 计算最大公因数 判断两个数组中是否有相同的数字 字符串反转

    社会上常用的Java试题库

    写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc。 3.数据类型之间的转换 如何将数值型字符转换为数字(Integer,Double) 如何将数字...

    java面试题.docx

    如何将字符串反转? String 类的常用方法都有那些? 接口和抽象类有什么区别? Files的常用方法都有哪些? java 容器都有哪些? List、Set、Map 之间的区别是什么? Collection 和 Collections 有什么区别? ...

Global site tag (gtag.js) - Google Analytics