java字符串反转总结

方法1 在Java中,最好的实现就是用JDK中StringBuffer的反转方法,它不仅速度快,效率高,而且还知道如何处理unicode代理对(surrogate pairs)。其它方案基本上都可以忽略掉。

方法2 先把字符串转为字符数组。在进行循环反转

方法3 利用递归的方法反转。

方法4 利用StringBuffer进行反转

方法5 利用位运算进行反转。

代码示例:

package com.lxz.pattern;

/**
 * 字符串反转总结
 * 
 * @author louxuezheng 2014年4月2日
 */
public class WordReverser {
	// JDK中的反转方法
	public String jdkReverser(String str) {
		if ((null == str) || (str.length() <= 1)) {
			return str;
		}
		return new StringBuffer(str).reverse().toString();
	}

	// 转换成字符数组反转
	public String charsReverse(String str) {
		if ((null == str) || (str.length() <= 1)) {
			return str;
		}
		char[] chars = str.toCharArray();
		int right = chars.length - 1;
		for (int left = 0; left < right; left++) {
			char swap = chars[left];
			chars[left] = chars[right];
			chars[right--] = swap;
		}
		return new String(chars);
	}

	// 递归法
	public String RecursionReverser(String str) {
		if ((null == str) || (str.length() <= 1)) {
			return str;
		}
		return RecursionReverser(str.substring(1)) + str.charAt(0);
	}

	// 利用StringBuffer反向插入反转
	public String stringBufferReverser(String str) {
		if ((null == str) || (str.length() <= 1))
			return str;
		StringBuffer reverse = new StringBuffer(str.length());
		for (int i = str.length() - 1; i >= 0; i--) {
			reverse.append(str.charAt(i));
		}
		return reverse.toString();
	}

	// 利用异或运算反转
	public String reverseByXOR(String str) {
		char[] chars = str.toCharArray();
		int len = str.length() - 1;
		for (int i = 0; i < len; i++, len--) {
			chars[i] ^= chars[len];
			chars[len] ^= chars[i];
			chars[i] ^= chars[len];
		}
		return new String(chars);
	}

	public static void main(String[] args) {
		WordReverser wr = new WordReverser();
		String word = "happy world";
		System.out.println("jdkReverser:" + wr.jdkReverser(word));
		System.out.println("charsArrayReverse:" + wr.charsReverse(word));
		System.out.println("RecursionReverser:" + wr.RecursionReverser(word));
		System.out.println("stringBuffer:" + wr.stringBufferReverser(word));
		System.out.println("reverseByXOR:" + wr.reverseByXOR(word));
	}
}

参考文章:http://weblogs.sqlteam.com/mladenp/archive/2006/03/19/9350.aspx

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值