package ;
import ;
/**
* 8 种字符串反转的方法, 其实可以是9种方法,第9种是使用StringBuffer和StringBuilder中实现的方法
* @author Josh Wang(Sheng)
*
* @email swang6@
*
*/
public class StringReverse {
/**
* 二分递归地将后面的字符和前面的字符连接起来。
*
* @param s
* @return
*/
public static String reverse1(String s) {
int length = ();
if (length <= 1)
return s;
String left = (0, length / 2);
String right = (length / 2, length);
return reverse1(right) + reverse1(left);
}
/**
* 取得当前字符并和之前的字符append起来
* @param s
* @return
*/
public static String reverse2(String s) {
int length = ();
String reverse = "";
for (int i=0; i<length; i++)
reverse = (i) + reverse;
return reverse;
}
/**
* 将字符从后往前的append起来
* @param s
* @return
*/
public static String reverse3(String s) {
char[] array = ();
String reverse = "";
for (int i = - 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 = ();
int end = () - 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 = ();
int begin = 0;
int end = () - 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 = ();
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < ; i++)
(array[i]);
String reverse = "";
for (int i = 0; i < ; i++)
reverse += ();
return reverse;
}
public static void main(String[] args) {
(reverse1("Wang Sheng"));
(reverse2("Wang Sheng"));
(reverse3("Wang Sheng"));
(reverse4("Wang Sheng"));
(reverse5("Wang Sheng"));
(reverse6("Wang Sheng"));
(reverse7("Wang Sheng"));
(reverse8("Wang Sheng"));