方法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