package cglib;java
import java.util.Stack;數組
public class Reverse {app
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("數組首位調換方法一輸出:"+reverse1("傻瓜大傻瓜"));
System.out.println("遞歸方法二輸出:"+reverse2("123456"));
System.out.println("StringBuffer方法三輸出:"+reverse3("白癡大白癡"));
System.out.println("棧方法四輸出:"+reverse4("帥極了"));
System.out.println("使用StringBuffer的append方法五輸出:"+reverse5("大師哥"));
System.out.println("StringBuffer使用StringBuffer的setCharAt方法六輸出:"+reverse6("李易峯"));
}遞歸
// 方法一:直接使用數組首位調換,放到另外的數組中
public static String reverse1(String str){
if(str==null||str.length()<2){
return str;
}
char[] arry=str.toCharArray();
char[] reverseArray=new char[arry.length];
for(int i=0;i<arry.length;i++){
reverseArray[arry.length-i-1]=arry[i];
}
return new String(reverseArray);
}
// 巧妙使用遞歸的方式,把字符串的第一位挪到最後。配合
//reverseString(s.substring(1))遞歸調用,每次都把字符串的第一位挪到最後。直到遞歸的參數只剩下一個字符爲止。
public static String reverse2(String str) {
//System.out.println(str);
//System.out.println(str.substring(1));
//System.out.println(str.charAt(0));
if (str == null || str.length() <2) {
return str;
}
return reverse2(str.substring(1))+str.charAt(0);
}
// 藉助其餘包含反轉方法的類
public static String reverse3(String str) {
if (str == null || str.length() <2) {
return str;
}
StringBuffer array = new StringBuffer(str) ;
System.out.println("方法三:"+array);
array=array.reverse();
return array.toString();
}
public static String reverse4(String str) {
if (str == null || str.length() <2) {
return str;
}
String result="";
char[] array=str.toCharArray();
Stack<Character> stack = new Stack<>();
for(char a:array){
stack.push(a);
}
int length = stack.size(); //注意這個地方必需要先把length暫存起來,由於在遍歷的過程當中,pop()堆的時候,會改變堆的大小,//注意這個地方必需要先把length暫存起來,由於在遍歷的過程當中,pop()堆的時候,會改變堆的大小。stack.size()會變化,不能做爲條件 。或者用str.length做爲條件
for(int i=0;i<length;i++){
result+=stack.pop();
}
return result;
}
public static String reverse5(String str) {
if (str == null || str.length() <2) {
return str;
}
StringBuffer array = new StringBuffer(str.length()) ;
//System.out.println("方法五:"+array);
for(int i=str.length()-1;i>=0;i--){
//System.out.println("i="+i);
//System.out.println("str.charAt(i):"+str.charAt(i));
array.append(str.charAt(i));
//System.out.println("array:"+array);
}
return array.toString();
}
public static String reverse6(String str) {
if (str == null || str.length() <2) {
return str;
}
StringBuffer array = new StringBuffer(str) ;字符串
for (int i = 0; i < (str.length() / 2); i++) {
int swapIndex = str.length() - 1 - i;
System.out.println("swapIndex:"+swapIndex);
char swap = array.charAt(swapIndex);
System.out.println("swap:"+swap);
array.setCharAt(swapIndex, array.charAt(i));
System.out.println("array:"+array);
System.out.println("i:"+i);
array.setCharAt(i, swap);
System.out.println("array="+array);
}
return array.toString();
}
}string
輸出:class
數組首位調換方法一輸出:瓜傻大瓜傻
遞歸方法二輸出:654321
方法三:白癡大白癡
StringBuffer方法三輸出:癡白大癡白
棧方法四輸出:了極帥
使用StringBuffer的append方法五輸出:哥師大
swapIndex:2
swap:峯
array:李易李
i:0
array=峯易李
StringBuffer使用StringBuffer的setCharAt方法六輸出:峯易李import