public class StrReverse {
public static void main(String[] args) {
String str = "reverseTest"
//1.用stringBuffer或者stringBuilder自带的reverse方法
// String s = reverseOne(str)
//2.字符串拆分为字符数组,并且不创建额外空间
// String s = reverseTwo(str)
//3.StringBuffer倒序拼接
// String s = reverseThree(str)
//4.利用栈的先进后出
// String s = reverseFour(str)
//5.二分换位反转
// String s = reverseFive(str)
//6.切割递归反转
// String s = reverseSix(str)
//7.二分递归反转
String s = reverseSeven(str)
System.out.println(s)
}
private static String reverseSeven(String str) {
if (str.length() <=1){
return str
}
String left =str.substring(0,str.length()/2)
System.out.println(left)
String right =str.substring(str.length()/2,str.length())
System.out.println(right)
return reverseSeven(right)+reverseSeven(left)
}
private static String reverseSix(String str) {
if (str.length() <=1){
return str
}
String substring = str.substring(0, 1)
return reverseSix(str.substring(1))+ substring
}
private static String reverseFive(String str) {
char[] chars = str.toCharArray()
int start = 0
int end = chars.length-1
for (
//交换
char c=chars[start]
chars[start]=chars[end]
chars[end]=c
}
return new String(chars)
}
private static String reverseFour(String str) {
StringBuffer sb = new StringBuffer()
Stack stack = new Stack()
for (int i = 0
//入栈
stack.push(str.charAt(i))
}
//出栈
while (!stack.isEmpty()){
sb.append(stack.pop())
}
return sb.toString()
}
private static String reverseThree(String str) {
StringBuffer sb = new StringBuffer()
for (int i = str.length()-1
sb.append(str.charAt(i))
}
return sb.toString()
}
private static String reverseTwo(String str) {
char[] chars = str.toCharArray()
int start=0
while (start < end) {
//一个数异或另一个数两次后,结果还为此数据;
chars[start] ^= chars[end]
chars[end] ^= chars[start]
chars[start] ^= chars[end]
start++
end--
}
return new String(chars)
}
public static String reverseOne(String str) {
return new StringBuffer(str).reverse().toString()
}
}