·首先介绍一下最简单的,利用Java种的StringBuffer来进行反转。
public class Test{
public static void main(String[] args) {
//字符串反转
String string = "hello world";
String reverse = new StringBuffer(string).reverse().toString();
("字符串反转前:"+string);
("字符串反转后:"+reverse);
}
}
在介绍下从网上找来的:
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"));
}
}
来自:/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的值,完成交换。这个异或,也是同样的原理~~~